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

如何在单个svn diff命令中获得非连续更改,svn,Svn,举例说明问题 我在源文件中做了一些更改,例如:在文件夹中: project/foo/src project/fun/src . . project/foo/tst project/fun/tst . . 差异可被视为: # svn diff -r 2000:2001 <svn url> 这些特定变化的差异可以看作: # svn diff -r 2001:2002 <svn url> # svn diff -r 2002:2003 <svn url>

举例说明问题

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

project/foo/src
project/fun/src
.
.
project/foo/tst
project/fun/tst
.
.
差异可被视为:

# svn diff -r 2000:2001 <svn url>
这些特定变化的差异可以看作:

# svn diff -r 2001:2002 <svn url>
# svn diff -r 2002:2003 <svn url>
#svn diff-r 2001:2002
后来,我在源代码中发现了一些错误,并在project/foo/src中做了一些更改。 这些特定变化的差异可以看作:

# svn diff -r 2001:2002 <svn url>
# svn diff -r 2002:2003 <svn url>
#svn diff-r 2002:2003
现在,我需要一个svn diff命令来单独查看源代码中的更改(不包括单元测试更改)

我找不到一个命令来查看非连续的更改(即2000-2001和2002-2003)。这是怎么可能的(注意:我知道使用两个单独的diff命令是可能的,我正在尝试找出使用单个命令是否可能)

或者,是否可以在命令中以svn url提供正则表达式。 i、 例如:

# svn diff -r 2000:2001 <svn url pattern>
//where 'pattern' lists folders that does not contain 'tst' in name. 
#svn diff-r 2000:2001
//其中“模式”列出名称中不包含“tst”的文件夹。

我不认为只需一次呼叫svn就可以做到这一点。(打两个电话有什么不对?这比尝试一起破解东西更简单。)

当我需要使用通配符时,我使用了grep。给予

svn diff -r 2000:2001 <svn url pattern> | grep -v 'test'
svn diff-r 2000:2001 | grep-v“测试”

对于您的用例,可能最好按文件路径对其进行切片。它仍然是多个命令,但如果您在临时版本中进行了更新,则会得到最小的累积差异

svn diff -r2000:2003 project/foo/src
svn diff -r2000:2003 project/fun/src
如果有大量路径,这可能会变得太麻烦。对于一次性作业,您可以将历史记录导入到诸如Git之类的DVCS中,并使用其rebase功能(或等效功能)重写历史记录,以便获得要分发的差异。

我得到了答案。:)

您可以为此创建变更列表

详情请浏览:

因此,我可以为源代码更改创建一个变更列表,并为单元测试更改创建另一个变更列表

有一个缺点,它只能在工作副本上使用

变更列表是特定工作副本的工件,这意味着 变更列表分配无法传播到存储库或 以其他方式与其他用户共享

使用Subversion 1.7(及更高版本),您可以

svn log --diff -r 2000:2003 project/foo/src

这将为您提供适用于src的所有修订的个别差异。(也包括在同一版本中更改的其他目标)

grep
可能过于原始,但您可以使用允许排除路径的外部差异工具,或者编写自己的简单过滤器;幸运的是,diff输出是机器可读的。