什么 svn 命令会列出在一个分支上修改的所有文件?

在 svn 中,我创建了一个分支,比如在22334修订版中。

我如何得到一个所有文件的列表,这些文件在分支上被更改,而不是在主干上被更改?我不希望看到在创建分支时和“现在”之间在主干上更改的文件。

139240 次浏览

This will do it I think:

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

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

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

This will list only modified files:

svn status -u | grep M
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

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.

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.