What svn command would list all the files modified on a branch?

Viewed 137868

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 Answers

This will do it I think:

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

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.

-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 '\?' 

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.

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.

Related