从主干到分支的SVN合并导致树冲突

use*_*192 5 svn merge svn-merge

假设我们有一个trunk分支(COKE).(我用git了SVN和合并来自trunkCOKE与SVN,不是GIT)

  1. FILE1 on trunkCOKE分支中我们想要改变.
  2. 我们合并trunk,我提交合并COKE branch.
  3. 然后FILE1被删除trunk,我希望改变COKE.
  4. 我合并,发生树冲突上FILE1COKE branch.

由于(2)中的合并提交,是否会发生此树冲突?

我该怎么做才能解决这三个冲突?

svn resolve --accept theirs-full /path/FILE1 没有用,只说"工作"会起作用.

vad*_*hev 3

除非缺少某些合并跟踪信息,否则在这种情况下不应出现树冲突。

为了检查这一点,请运行以下命令:

$ 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 的修改。