How to find the changes made by a specific Subversion user?

Using the command line, I would like to see all the changes made by a specific user. Is it possible? I have looked at the documentation for svn log , but cannot figure out how to do this.

+7
svn
source share
5 answers

I do not know how to do this using pure Subversion. But you can do it with sed :

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

This finds each instance of the username, and then prints everything down to the dashed line that marks the end of the log entry.

The search template is very flexible - you can easily change it to search for other things. For example,

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

Will return all commits made in December (by any author).

Edit: If you don't want to use the actual commit message, but just summary metadata, you can just use grep same way for William Lyra Windows answer :

 svn log | grep username 
+7
source share

If you do not mind reading the magazine in XML format, here, as with XML Starlet :

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

If you do not want these files to be listed, delete --verbose .

Here is an example output without a detailed description.

 $ 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> ... 
+4
source share

The easiest way is to use the Subversion 1.8+ command line client; it supports the --search and --search-and options, which allow you to filter the output of svn log to display only revisions matching the specified search pattern.

SVNBook 1.8 | svn log command line link ,

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

For example,

Search for fixes made by Sally or 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. ------------------------------------------------------------------------ $ 

Search for corrections made by Sally in /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. ------------------------------------------------------------------------ $ 

NOTE. You can also use the TortoiseSVN Log Journal Editor to search and filter.

+4
source share

Windows version:

 svn log | find "William_Leara" 

The result is as follows:

 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 

and etc.

+2
source share

On Windows, using the UnxUtils version of sed , I needed to use these regular expressions instead of matching ---- the following start of line:

 svn log | sed -n "/username/,/^----/p" 
+1
source share

All Articles