2012-02-08 90 views
35

我需要在SVN的两个版本之间获取已更改的文件列表。从两个版本之间的SVN命令行获取更改的文件

我用下面的命令:

svn diff -r 5001:6001 --summarize https://svn.blah.com/../ > output.txt 

出于某种原因,修订于5001修订版中的文件输出文本文件不填充。

从两个版本(包括版本和版本,包括版本5001和版本6001)中提取文件列表的确切命令是什么?

+1

你尝试'-r 5000:6001'? – 2012-02-08 09:53:37

+0

是的,我试过-r 5000:6001它包括在r 5001上修改的文件,但不是5000 ....是否意味着我必须总是递减一个修订号 – Madhan 2012-02-08 09:56:49

+0

是的。这是它的工作方式。 – 2012-02-08 10:00:53

回答

52

尝试用svn diff -r 5000:6001代替。要理解这一点,请考虑以下几点:svn diff -r 100:100的输出结果会是什么样子?它不会显示任何更改,因为修订是相同的。要查看版本100的更改,我们必须使用-r 99:100

+1

当我试图svn diff -r 100:100输出为空 – Madhan 2012-02-08 10:06:25

+6

正确 - 因为100和100之间没有区别 - 它们是相同的。根据定义。因此,如果你想知道你的5001:6001与5001之间的区别,你需要做一个-r 5000:6001。 – 2012-02-08 10:38:44

8

尝试svn log -r 5000:6001 -v获取文件列表。这给出了按修订号分类的文件列表。所以,一个人可以更好地了解哪些文件在哪些版本中一目了然。

+0

我需要一个在两个任意版本之间改变的文件列表,这对我有用,而diff -r建议,带--summarize或不列出回购库中的所有文件。也许我错过了什么? – 2014-01-14 19:39:34

+0

当存在来自合并的修订时,请注意此输出。今天遇到一个问题,输出看起来像/branch/abc/new_file.js(来自trunk/new_file.js:12344)。根据我的经验,如果您计划将此数据作为其他输入的输入,则总是使用--xml。 – MattSaw 2016-09-14 13:49:59

8

如果你想要所有的改变,Dirk-Willem van Gulik的答案是完美的。但是,如果你只想要的文件列表改变--summarize开关添加到您的命令,

svn diff -r 13447:HEAD 
6

svn diff -r v1:v2 --summarize | awk '{print $2}' > filelist.txt

说明:

svn diff -r v1:v2 --summarize为您提供的状态和分离的文件名制表符。您需要选择制表符后面的字符串 - 第二个字段。你可以做,使用awk和输出重定向到filelist.txt

-1
svn diff -r 5001:6001 ...local path hier ... > output.txt 
+1

您可以添加一些解释为什么这解决了用户的问题? – Chrismas007 2015-01-30 17:27:47

相关问题