2009-02-20 35 views

Trả lời

14

Bạn có thể sử dụng svn log lệnh để tạo ra một tập tin XML với rất nhiều thông tin về tất cả các cam kết như thế này:

svn log URL --xml --verbose > commits.xml 

Có một số tùy chọn khác bạn có thể chơi để hạn chế phạm vi sửa đổi, hãy xem thêm thông tin về đạo cụ rev, bao gồm thông tin hợp nhất, v.v.

Vấn đề sau đó trở thành "làm cách nào để thực hiện truy vấn trên nội dung của tài liệu XML", dễ hơn làm việc với các API SVN hiện có. Ví dụ, trong C# bạn có thể làm LINQ queries on XML.

+1

Cụ thể, phạm vi --revision có thể bao gồm phạm vi ngày: [[svn log --verbose --revision '{2009-01-01}': '{2009-02-20} '--xml]] Bây giờ, việc xác định cái nào không thay đổi sẽ yêu cầu một số xử lý hậu kỳ. – phord

2

Hiện tại không, không có ngôn ngữ truy vấn lật đổ hoặc truy vấn dựa trên api đang được sử dụng rộng rãi (ok, bây giờ xem ai đó mâu thuẫn với tôi, đó là sự sống trên mạng mà tôi cho là).

Điều này có nghĩa bạn bị giới hạn nối lại với nhau các kết quả đầu ra từ các lệnh svn bình thường như

svn info 

svn log 

tôi chắc chắn rằng một cái gì đó giống như bash hoặc PowerShell có thể làm điều này ít nhất khả thi. Nếu bạn đang mắc kẹt với hàng loạt cửa sổ, tôi sẽ bắt đầu khóc ngay bây giờ.

+2

Ồ, thực sự? Một nhu cầu nghiêm trọng cho một công cụ hữu ích cho các nhà phát triển trên mọi nền tảng và nó không tồn tại? Chúng ta đang làm gì với buổi chiều và buổi chiều? –

+1

Không thực sự, hầu hết thông tin cần thiết hàng ngày đều dễ dàng có sẵn trong bộ lệnh tiêu chuẩn. Sẽ không bình thường nếu bạn muốn tìm danh sách các tệp chưa được sửa đổi trong một thời gian. Mặc dù tâm trí của tôi bây giờ đang bận rộn tạo SVNSQL, chết tiệt. –

+1

Linq2Svn - damn thats âm thanh tốt –

1

Như đã đề cập, nhật ký svn/thông tin có thể được kết hợp với các lệnh trình bao để tìm những gì bạn muốn. Ngoài ra, bạn có thể trực tiếp sử dụng API của SVN trong C/C++ để lập trình xử lý các ủy thác kho lưu trữ. SVN có các ràng buộc Python. Nếu Java là ngôn ngữ của bạn lựa chọn, hãy thử http://svnkit.com/

16

Bạn có thể sử dụng dự án SvnQuery (http://svnquery.tigris.org) có ý định cung cấp giao diện truy vấn để thực hiện các truy vấn như vậy. Nó có một API .NET và một lối vào web, cung cấp cùng một ngôn ngữ truy vấn. Bạn có thể thực hiện các truy vấn phức tạp với toán tử, biểu thức lồng nhau, ký tự đại diện, cụm từ và cụm từ khoảng cách. Toán tử bạn yêu cầu, tính toán sự khác biệt giữa bây giờ và ngày cam kết cuối cùng, không được triển khai, nhưng vì nó là dự án nguồn mở, bạn có thể tình nguyện làm việc đó hoặc gửi yêu cầu tính năng cho nó :-)

2

Với Powershell bạn có thể làm một số truy vấn tốt đẹp trên các thông điệp log

$data = [xml] (svn log -r "r1:r2" --xml) 
$data.log.logentry | where-object {$_.message -match "regex"} 

Hoặc thậm chí trên các tập tin thay đổi (với một số ma thuật cần thiết để tránh một vấn đề PowerShell nổi tiếng)

$diff = [xml] (svn diff -r "r1:r2" --xml --summarize | %{$_ -replace "item", "item1"}) 
$diff.diff.paths.path | where-object {$_.item1 -eq "file"} 
1

Ngoài việc sử dụng dòng lệnh Subversion hoặc trình khách đồ họa như TortoiseSVN để xem lịch sử kho lưu trữ svn, bạn có thể cài đặt nâng cao giao diện web cho Repversion Subversion.

Ví dụ: trong VisualSVN Server 3.2 và mới hơn, bạn có thể sử dụng trình xem lịch sử sửa đổi dựa trên web, see the demo here.

Xem mô tả của the HTML5-based web svn client here.

1

Vì 1.7 SVN, bản sao làm việc có tệp wc.db trong thư mục .svn. Nó là một cơ sở dữ liệu sqlite cơ bản, do đó khá dễ dàng để truy vấn.

Bạn nên đảm bảo bản sao làm việc của mình được cập nhật. Nếu bạn đang làm bất cứ điều gì nhiều hơn một lựa chọn nhanh chóng và đơn giản, nó sẽ an toàn hơn để sao chép các tập tin chứ không phải là nguy cơ phá vỡ nó.

Ngày thay đổi dựa trên kỷ nguyên unix. Ví dụ:

sqlite3 .svn\wc.db "select changed_revision, datetime((changed_date/1000000),'unixepoch') changed_date, changed_author, repos_path from NODES" 
+0

Cảm ơn bạn rất nhiều vì 'change_date/1000000'. Bạn là người duy nhất đề cập đến điều đó. – steven

Các vấn đề liên quan