【问题标题】:`svn merge` produces different results than `svn diff``svn merge` 产生与 `svn diff` 不同的结果
【发布时间】:2011-05-10 21:21:11
【问题描述】:

所以我以前认为我对 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
...

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

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

svn merge ^/trunk ^/branches/KULRICE-5050 将主干作为我的工作副本。我没有修改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 合并跟踪。

【问题讨论】:

    标签: svn merge


    【解决方案1】:

    也许是“橡胶闪避”在起作用,但这里的答案是我需要在我的合并命令中指定 --ignore-ancestry。否则,即使服务器仍然是 1.4 并且不支持合并跟踪,1.6 的 svn 客户端也会隐式地代表我尝试与合并跟踪进行合并。

    【讨论】:

    • 谢谢。与我正在使用的场景完全相同。我想念--reintegrate
    猜你喜欢
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2016-12-24
    相关资源
    最近更新 更多