96

当合并几个分支(使用 SVN 1.6.1)时,在两个分支上都添加了一个文件(然后在这些单独的分支中工作),我遇到了一个新的树冲突:

      C foo.txt
  >   local obstruction, incoming add upon merge

我需要两个分支的更改,但树冲突并没有给我通常的 .working、.merge-left 和 .merge-right 文件——由于冲突的性质,这是可以理解的。有很多这样的冲突,并且在每个分支上都发生了相同文件的删除,但它们很容易解决。

我该如何解决这个问题?SVN redbean book (for 1.6) 没有涵盖这种情况。

4

4 回答 4

167

我找到了一个建议解决方案的帖子。它即将运行:

svn resolve --accept working <YourPath>

这将声称本地版本文件正常。
您可以为单个文件或整个项目目录运行它。

于 2010-02-05T12:26:30.623 回答
40

正如“树冲突”设计文档的旧版本(2009)中提到的:

XFAIL 冲突来自添加版本控制文件的合并

该测试进行合并,将没有历史记录的文件添加到现有版本化文件中。
这应该是 ' local obstruction, incoming add upon merge' 品种的文件的树冲突。修复了 r35341 中的预期。

(顺便说一下,这在 ClearCase 中也称为“邪恶双胞胎”):
一个文件在两个不同的分支中创建了两次(这里“添加”了两次),为两个不同的元素创建了两个不同的历史记录,但名称相同。

理论上的解决方案是在目标分支“”中手动合并这些文件(使用外部差异工具)B2

如果您仍在源分支上工作,理想的情况是从源分支中删除该文件B1,然后合并从B2toB1以使该文件可见B1(然后您将在同一个元素上工作)。
如果因为只发生 fromB1到合并而无法进行合并B2,则每次合并都需要手动合并B1->B2

于 2009-04-20T11:29:56.423 回答
9

如果传入的更改是您想要的怎么办?我无法运行 svn resolve --accept theirs-full

svn resolve --accept base

于 2011-02-16T09:11:14.463 回答
3

我只是设法让自己非常彻底地尝试遵循上面 user619330 的建议。情况是:(1):我在我的初始分支branch1上工作时添加了一些文件;(2) 我创建了一个新的分支,branch2 用于进一步开发,将它从主干分支出来,然后合并我从 branch1 的更改 (3) 一位同事将我的 mods 从 branch1 复制到他自己的分支,添加了更多的 mods,然后合并回主干;(4) 我现在想将来自主干的最新更改合并到我当前的工作分支 branch2 中。这是 svn 1.6.17。

合并与新文件存在树冲突,我想要来自它们不同的主干的新版本,所以从 branch2 的干净副本中,我对冲突文件进行了 svn 删除,提交了这些 branch2 更改(从而创建了一个临时没有相关文件的 branch2 版本),然后我从主干进行了合并。我这样做是因为我希望历史记录与主干版本相匹配,这样以后在尝试合并回主干时就不会遇到更多问题。合并进行得很好,我得到了文件的主干版本,svn st 显示一切正常,然后我在尝试提交更改时遇到了更多的树冲突,在我之前所做的删除和合并中的添加之间。是否有一个 svn 解决了有利于我的工作副本(现在有文件的主干版本)的冲突,并让它提交。

嗯,不。更新 branch2 的另一个副本导致文件的旧版本(主干合并前)。所以现在我有两个不同的 branch2 工作副本,据说更新到相同的版本,有两个不同版本的文件,并且都坚持认为它们是完全最新的!签出 branch2 的干净副本会导致文件的旧(主干前)版本。我手动将这些更新到主干版本并提交更改,回到我的第一个工作副本(我最初提交主干更改的地方),尝试更新它,现在在有问题的文件上出现校验和错误。把有问题的目录吹走,通过更新获得一个新版本,最后我有了一个好的分支 2 版本,主干发生了变化。我希望。警告开发商。

于 2011-08-17T22:55:18.697 回答