在这种情况下应该没有树冲突,除非缺少某些合并跟踪信息。
为了检查这一点,请运行以下命令:
$ svn switch ^/branches/COKE
$ svn mergeinfo --show-revs=merged ^/trunk
这会打印从主干合并到 COKE 分支的修订列表。当您在主干修改 FILE1 时,您能找到修订版吗?很可能没有那个版本。
当 SVN 用户将修改从一个分支合并到另一个分支时,这是一种常见的情况,但随后提交的不是整个工作副本(即包括根目录),而只是那些被合并修改的文件。
错误的:
$ svn merge ^/trunk
--- Merging r5 through r6 into '.':
M file.txt
--- Recording mergeinfo for merge of r5 through r6 into '.':
U .
$ svn commit FILE1
问题是根目录存储 svn:mergeinfo 属性。Subversion 使用此属性来跟踪合并,因此您必须提交整个工作副本。
正确的:
$ svn merge ^/trunk
--- Merging r5 through r6 into '.':
M file.txt
--- Recording mergeinfo for merge of r5 through r6 into '.':
U .
$ svn commit .
当你第二次尝试将主干合并到 COKE 分支时,Subversion 检测到 FILE1 在主干被删除,同时它在 COKE 分支被修改(通过步骤 2)。结果,它将文件标记为树冲突(本地编辑,合并时传入的删除)。
如何解决?
现在您必须修复 COKE 分支的合并跟踪信息。为了做到这一点,使用 --record-only 选项重复步骤 2 并指定正确的修订:
$ svn merge --record-only -cN ^/trunk
--- Recording mergeinfo for merge of r5 through r6 into '.':
U .
$ svn commit .
其中 N 是您尝试合并的主干中 FILE1 的修改。