如何在单个svn diff命令中获得非连续更改

时间:2012-09-03 11:15:49

标签: svn

举一个例子来解释这个问题。

我在源文件中做了一些更改,例如:在文件夹中:

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. 

4 个答案:

答案 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的所有修订的个别差异。 (但在同一版本中也有其他改变的目标)