84
votes

In svn, I have a branch which was created, say at revision 22334. Commits were then made on the branch.

How do I get a list of all files that were changed on the branch compared to what's on the trunk? I do not want to see files that were changed on the trunk between when the branch was created and "now".

8
I come back to this question rather often and the most helpful answer is the one deleted from @AndrewMedico , with svn log :-DDaniel W.

8 Answers

84
votes

This will do it I think:

svn diff -r 22334:HEAD --summarize <url of the branch>
45
votes

You can also get a quick list of changed files if thats all you're looking for using the status command with the -u option

svn status -u

This will show you what revision the file is in the current code base versus the latest revision in the repository. I only use diff when I actually want to see differences in the files themselves.

There is a good tutorial on svn command here that explains a lot of these common scenarios: SVN Command Reference

29
votes

You can use the following command:

svn status -q

According to svnbook:

With --quiet (-q), it prints only summary information about locally modified items.

WARNING: The output of this command only shows your modification. So I suggest to do a svn up to get latest version of the file and then use svn status -q to get the files you have modified.

14
votes

This will list only modified files:

svn status -u | grep M
2
votes

-u option will display including object files if they are added during compilation.

So, to overcome that additionally you may use like this.

svn status -u | grep -v '\?' 
2
votes
echo You must invoke st from within branch directory
SvnUrl=`svn info | grep URL | sed 's/URL: //'`
SvnVer=`svn info | grep Revision | sed 's/Revision: //'`
svn diff -r $SvnVer --summarize $SvnUrl
0
votes

svn log -q -v shows paths and hides comments. All the paths are indented so you can search for lines starting with whitespace. Then pipe to cut and sort to tidy up:

svn log --stop-on-copy -q -v | grep '^[[:space:]]'| cut -c6- | sort -u

This gets all the paths mentioned on the branch since its branch point. Note it will list deleted and added, as well as modified files. I just used this to get the stuff I should worry about reviewing on a slightly messy branch from a new dev.

0
votes

I do this as a two-step process. First, I find the version that was the origin of the branch. From within the checkout of the branch:

svn log --stop-on-copy |tail -4

--stop-on-copy tells SVN to only operate on entries after the branch. tail gets you the last log entry, which is the one that contains the branch information. The number that begins with an 'r' is the revision at which you branched. Then, use svn diff to find changes since that version:

svn diff -r <revision at which you branched>:head --summarize

the --summarize option shows a file list only, without the actual diff contents, similar to the 'svn status' output. If you want to see the actual diff, just remove the --summarize option.