2

举个例子来说明问题。

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

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

4 回答 4

1

我不认为你可以通过一个调用 svn 来做到这一点。(打两个电话有什么问题?这比试图一起破解一些东西更简单。)

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

svn diff -r 2000:2001 <svn url pattern> | grep -v 'test'
于 2012-09-03T14:25:00.183 回答
0

我得到了答案。:)

您可以为此创建更改列表。

更多详情请访问:http ://svnbook.red-bean.com/en/1.5/svn.advanced.changelists.html

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

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

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

于 2012-09-05T05:25:22.047 回答
0

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

svn diff -r2000:2003 project/foo/src
svn diff -r2000:2003 project/fun/src

如果有大量路径,这可能会变得太麻烦。对于一次性工作,您可以将历史记录导入 DVCS,例如 Git,并使用其 rebase 工具(或等效工具)重写历史记录,以便获得想要分发的差异。

于 2012-09-03T18:49:18.133 回答
0

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

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

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

于 2012-09-06T15:29:24.837 回答