use*_*192 5 svn merge svn-merge
假设我们有一个trunk
分支(COKE
).(我用git了SVN和合并来自trunk
于COKE
与SVN,不是GIT)
FILE1 on trunk
在COKE
分支中我们想要改变.trunk
,我提交合并COKE branch
.FILE1
被删除trunk
,我希望改变COKE
.FILE1
的COKE branch
.由于(2)中的合并提交,是否会发生此树冲突?
我该怎么做才能解决这三个冲突?
svn resolve --accept theirs-full /path/FILE1
没有用,只说"工作"会起作用.
除非缺少某些合并跟踪信息,否则在这种情况下不应出现树冲突。
为了检查这一点,请运行以下命令:
$ svn switch ^/branches/COKE
$ svn mergeinfo --show-revs=merged ^/trunk
Run Code Online (Sandbox Code Playgroud)
这会打印从主干合并到 COKE 分支的修订列表。当你修改了trunk中的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
Run Code Online (Sandbox Code Playgroud)
问题是根目录存储了 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 .
Run Code Online (Sandbox Code Playgroud)
当你第二次尝试将 trunk 合并到 COKE 分支时,Subversion 检测到 FILE1 在 trunk 处被删除,同时它在 COKE 分支处被修改(通过步骤 2)。结果,它将文件标记为树冲突(本地编辑,合并时传入的删除)。
如何解决这个问题?
现在您必须修复分支 COKE 的合并跟踪信息。为此,请使用 --record-only 选项重复步骤 2 并指定正确的修订版本:
$ svn merge --record-only -cN ^/trunk
--- Recording mergeinfo for merge of r5 through r6 into '.':
U .
$ svn commit .
Run Code Online (Sandbox Code Playgroud)
其中 N 是您尝试合并的主干中 FILE1 的修改。