`svn merge`产生的结果与`svn diff`不同

时间:2011-05-10 21:21:12

标签: svn merge

所以我曾经认为我对svn来说还不错,但这个特殊问题阻碍了我......

我有一个主题分支,我添加了一些文件并做了一个小修改。我合并了从我的主题分支被切割到主要分支时发生的所有变化:

svn merge ^/trunk@revN ^/trunk@HEAD以分支作为我的工作副本。

我将这些更改提交到分支,现在我的分支和主干之间的不同看起来像这样:

> svn diff ^/trunk ^/branches/KULRICE-5050 --summarize
D       https://test.kuali.org/svn/rice/trunk/impl/src/main/groovy/org/kuali/rice/kim/impl/attribute/KimAttributeDataBo.groovy
M       https://test.kuali.org/svn/rice/trunk/kim/kim-impl/src/test/groovy/org/kuali/rice/kim/impl/role/RolePermissionBoTest.groovy
A       https://test.kuali.org/svn/rice/trunk/kim/kim-impl/src/test/groovy/org/kuali/rice/kim/impl/role/RoleResponsibilityActionBoTest.groovy
A       https://test.kuali.org/svn/rice/trunk/kim/kim-impl/src/test/groovy/org/kuali/rice/kim/impl/role/RoleBoTest.groovy
...

换句话说,没什么我没想到的。这些是我在我的分支中更改过的文件。

然后我尝试通过以下方式将分支合并到trunk:

svn merge ^/trunk ^/branches/KULRICE-5050以trunk作为我的工作副本。而不是修改diff --summarize显示的那些文件,我最终看到以下内容:

> svn merge ^/trunk ^/branches/KULRICE-5050
--- Merging differences between repository URLs into '.':
D    impl/src/main/groovy/org/kuali/rice/kim/impl/attribute/KimAttributeDataBo.groovy
U    kim/kim-impl/src/test/groovy/org/kuali/rice/kim/impl/role/RolePermissionBoTest.groovy
Skipped 'kim/kim-impl/src/test/groovy/org/kuali/rice/kim/impl/role/RoleResponsibilityActionBoTest.groovy'
Skipped 'kim/kim-impl/src/test/groovy/org/kuali/rice/kim/impl/role/RoleBoTest.groovy'
Skipped 'kim/kim-impl/src/test/groovy/org/kuali/rice/kim/impl/role/RoleResponsibilityBoTest.groovy'
Skipped 'kim/kim-impl/src/test/groovy/org/kuali/rice/kim/impl/role/RoleMemberBoTest.groovy'
A    kim/kim-impl/src/main/java/org/kuali/rice/kim/impl/role
...
...
Skipped 'kim/kim-api/src/main/java/org/kuali/rice/kim/api/role/RoleResponsibilityActionContract.java'
Summary of conflicts:
  Skipped paths: 38
--- Merging r20279 through r20321 into '.':
...
...
Summary of conflicts:
  Tree conflicts: 171
  Skipped paths: 33
--- Reverse-merging r20321 through r20279 into '.':
...

上面的...表示我遗漏了详细信息的地方。这只是一堆更新和文件冲突,应该远远不及我的变更集。

为什么在这种情况下合并试图在不同的修订版本范围内应用合并和反向合并时我所指定的是“给我在主干和分支之间的差异并将其合并到我的主干WC中”?它不应该对修订范围做任何事情。你知道为什么会发生这种情况以及我需要在我的svn命令中修改它来纠正它吗?

我的svn客户端是svn,版本1.6.15(r1038135),svn服务器是1.4.5(r25188)。服务器版本不受我的控制,因此使用较旧的合并方式而不是使用svn合并跟踪。

1 个答案:

答案 0 :(得分:5)

也许是“Rubber Ducking”在工作,但这里的答案是我需要为我的merge命令指定--ignore-ancestry。否则,1.6 svn客户端代表我隐式尝试合并跟踪,即使服务器仍然是1.4并且不支持合并跟踪。