举一个例子来解释这个问题。
我在源文件中做了一些更改,例如:在文件夹中:
project/foo/src
project/fun/src
.
.
差异可以被视为:
# svn diff -r 2000:2001 <svn url>
然后我在项目的单元测试中对文件夹进行了一些更改:
project/foo/tst
project/fun/tst
.
.
这些特定更改的差异可以视为:
# svn diff -r 2001:2002 <svn url>
后来,我在源代码中发现了一些错误,并在project / foo / src中进行了一些更改。 这些特定更改的差异可以视为:
# svn diff -r 2002:2003 <svn url>
现在,我需要一个单独的svn diff命令来单独查看源代码中的更改(不包括单元测试更改)。
我找不到一个命令来查看非连续的更改(即2000-2001和2002-2003)。这是可能的一些方法(注意:我知道2个单独的diff命令是可能的,我试图找出是否可以使用单个命令)。
否则,是否可以在命令中的svn url中给出正则表达式。 即:像:
# svn diff -r 2000:2001 <svn url pattern>
//where 'pattern' lists folders that does not contain 'tst' in name.
答案 0 :(得分:1)
我不认为你可以通过一次调用svn来做到这一点。 (两次打电话有什么不对?比试图一起破解更简单。)
当我需要使用通配符时,我使用了grep。给予
svn diff -r 2000:2001 <svn url pattern> | grep -v 'test'
答案 1 :(得分:0)
对于您的用例,也许最好按文件路径对其进行切片。它仍然是多个命令,但如果您在临时版本中进行了更新,则会获得最小的累积差异。
svn diff -r2000:2003 project/foo/src
svn diff -r2000:2003 project/fun/src
如果路径很多,这可能会变得太麻烦。对于一次性工作,您可以将历史记录导入DVCS(如Git),并使用其rebase工具(或等效工具)重写历史记录,以便获得要分发的差异。
答案 2 :(得分:0)
我得到了答案。 :)
您可以为此创建更改列表。
更多详情请见:http://svnbook.red-bean.com/en/1.5/svn.advanced.changelists.html
因此,我可以为源代码更改创建更改列表,并为单元测试更改创建另一个更改列表。
有一个缺点,它只能用于工作副本。
变更列表是特定工作副本的工件,这意味着 更改列表分配无法传播到存储库或 否则与其他用户共享。
答案 3 :(得分:0)
使用Subversion 1.7(及更高版本),您可以执行
svn log --diff -r 2000:2003 project/foo/src
这将为您提供适用于src的所有修订的个别差异。 (但在同一版本中也有其他改变的目标)