2010-06-04 22 views

Trả lời

7

Tôi không biết cách nào để thực hiện việc này bằng Subversion thuần túy. Nhưng bạn có thể làm điều đó with sed:

svn log | sed -n '/username/,/-----$/ p' 

này thấy mỗi trường hợp của tên người dùng, và sau đó tất cả mọi thứ in lên đến dòng tiêu tan mà đánh dấu sự kết thúc của một kỷ lục trong nhật ký.

Mẫu tìm kiếm rất linh hoạt - bạn có thể dễ dàng sửa đổi nó để tìm kiếm những thứ khác. Ví dụ:

svn log | sed -n '/Dec 2009/,/-----$/ p' 

Sẽ trả lại tất cả các cam kết được thực hiện trong tháng 12 (bởi bất kỳ tác giả nào).

Edit: Nếu bạn không muốn cam kết thông báo thực tế, nhưng chỉ là siêu dữ liệu tóm tắt, sau đó bạn có thể chỉ cần sử dụng grep, một cách tương tự như William Leara của Windows answer:

svn log | grep username 
+1

lý do tại sao không gian trước khi p trong lệnh sed ? – Daniel

+0

Khoảng trắng giữa/và p bị bỏ qua bởi sed; một số người có thể tìm thấy định dạng khác dễ đọc hơn trong nháy mắt. –

2

của Windows phiên bản:

svn log | find "William_Leara" 

Kết quả trông giống như:

r11506 | William_Leara | 2009-12-23 19:29:12 -0600 (Wed, 23 Dec 2009) | 12 lines 
r11505 | William_Leara | 2009-12-23 15:18:37 -0600 (Wed, 23 Dec 2009) | 12 lines 
r11504 | William_Leara | 2009-12-22 19:16:12 -0600 (Tue, 22 Dec 2009) | 12 lines 
r11503 | William_Leara | 2009-12-22 19:04:15 -0600 (Tue, 22 Dec 2009) | 12 lines 
r11502 | William_Leara | 2009-12-22 18:49:33 -0600 (Tue, 22 Dec 2009) | 12 lines 
r11501 | William_Leara | 2009-12-22 18:26:45 -0600 (Tue, 22 Dec 2009) | 12 lines 
r11500 | William_Leara | 2009-12-22 18:05:04 -0600 (Tue, 22 Dec 2009) | 12 lines 
r11499 | William_Leara | 2009-12-22 17:25:25 -0600 (Tue, 22 Dec 2009) | 12 lines 
r11498 | William_Leara | 2009-12-22 17:03:18 -0600 (Tue, 22 Dec 2009) | 12 lines 
r11497 | William_Leara | 2009-12-22 16:54:59 -0600 (Tue, 22 Dec 2009) | 12 lines 
r11494 | William_Leara | 2009-12-21 14:36:20 -0600 (Mon, 21 Dec 2009) | 12 lines 
r11491 | William_Leara | 2009-12-19 12:48:49 -0600 (Sat, 19 Dec 2009) | 12 lines 

, vv

+1

Điều này tương đương với 'svn log | grep 'William_Leara'' trong Unix. Tôi đã không nghĩ rằng OP có thể chỉ muốn siêu dữ liệu. Giải pháp 'sed' trong câu trả lời của tôi cũng trích xuất các thông điệp cam kết, có thể hoặc không thể là những gì anh ta muốn. –

4

Nếu bạn không nhớ đọc ghi ở định dạng XML, dưới đây là cách với XML Starlet:

svn log --xml --verbose <directory> | xmlstarlet sel -t -m "/log/logentry/author[text()='<wanted author>']/.." -c "." 

Nếu bạn không muốn các tập tin được liệt kê, hãy tháo --verbose.

Đây là kết quả ví dụ không có chi tiết.

$ svn log --xml zfce | xmlstarlet sel -t -m "/log/logentry/author[text()='pekka.jarvinen']/.." -c "." 

<logentry revision="157"> 
<author>pekka.jarvinen</author> 
<date>2009-09-26T19:23:40.060050Z</date> 
<msg>fix</msg> 
</logentry><logentry revision="156"> 
<author>pekka.jarvinen</author> 
<date>2009-09-25T20:40:01.823746Z</date> 
<msg>Dojo files are now downloaded from Google. Also some XHTML JS fixes (CDATA to &lt;script&gt;).</msg> 
</logentry><logentry revision="155"> 
<author>pekka.jarvinen</author> 
<date>2009-09-25T17:28:14.501392Z</date> 
<msg>Added spans</msg> 
</logentry><logentry revision="154"> 
<author>pekka.jarvinen</author> 
<date>2009-09-25T17:21:17.375304Z</date> 
<msg>Changed behavior: default.css is now not used as base. CSS in .INI configuration is always loaded.</msg> 
</logentry><logentry revision="151"> 
<author>pekka.jarvinen</author> 
<date>2009-04-10T00:24:41.683379Z</date> 
<msg>Added more PHP and Apache information</msg> 
</logentry> 

... 
+1

Câu trả lời hay nhất, imo –

+0

Cho đến nay IMHO mạnh mẽ nhất, nhưng tôi không thể làm cho xmlstarlet hoạt động ở chế độ phát trực tiếp, vì vậy tôi phải cắt và đóng các thẻ của nhật ký. – ATorras

4

Cách tiếp cận dễ nhất là sử dụng ứng dụng khách dòng lệnh Subversion 1.8+; nó hỗ trợ các tùy chọn --search--search-and cho phép bạn lọc đầu ra svn log để chỉ hiển thị các bản chỉnh sửa phù hợp với mẫu tìm kiếm bạn chỉ định.

SVNBook 1.8 | svn log command-line reference,

Subversion 1.8 Release Notes | svn log can filter log messages based on search terms.

Ví dụ,

tìm kiếm sửa đổi cam kết của thành viên Sally hay Harry:

$ svn log --search Sally --search Harry https://svn.example.com/repos/test 
------------------------------------------------------------------------ 
r1701 | Sally | 2011-10-12 22:35:30 -0600 (Wed, 12 Oct 2011) | 1 line 

Add a reminder. 
------------------------------------------------------------------------ 
r1564 | Harry | 2011-10-09 22:35:30 -0600 (Sun, 09 Oct 2011) | 1 line 

Merge r1560 to the 1.0.x branch. 
------------------------------------------------------------------------ 
$ 

tìm kiếm sửa đổi cam kết của thành viên Sally đến/foo/bar/helloworld.cpp:

$ svn log --verbose --search Sally --search-and /foo/bar/helloworld.cpp https://svn.example.com/repos/test 
------------------------------------------------------------------------ 
r1555 | Sally | 2011-07-15 22:33:14 -0600 (Fri, 15 Jul 2011) | 1 line 
Changed paths: 
M /foo/bar/helloworld.cpp 

Typofix. 
------------------------------------------------------------------------ 
r1530 | Sally | 2011-07-13 07:24:11 -0600 (Wed, 13 Jul 2011) | 1 line 
Changed paths: 
M /foo/bar/helloworld.cpp 
M /foo/build 

Fix up some svn:ignore properties. 
------------------------------------------------------------------------ 
$ 

LƯU Ý: Bạn cũng có thể sử dụng TortoiseSVN's Revision Log Dialog để thực hiện tìm kiếm và lọc.

1

Dưới Windows, sử dụng UnxUtils phiên bản của sed, tôi cần phải sử dụng các regexps thay vào đó, phù hợp với ---- lúc bắt đầu tiếp theo của dòng:

svn log | sed -n "/username/,/^----/p" 
Các vấn đề liên quan