当在两个分支上添加文件时,SVN如何解决新的树冲突


95

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

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

我需要两个分支的更改,但是树冲突不会给我通常的.working,.merge-left和.merge-right文件-由于冲突的性质,这是可以理解的。这些冲突中有相当多的冲突,并且每个分支上都发生了相同文件删除的冲突,但是解决起来很简单。

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

Answers:


40

“ Tree Conflict”设计文档的较旧版本(2009)中所述:

XFAIL因添加版本控制文件合并而发生冲突

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

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

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

如果您仍然在源科的工作,理想的情况是,除去从源分支文件B1从,合并回B2B1以使在该文件中看到B1(然后你会在相同的元素工作)。
如果由于合并仅发生在B1到之间而无法进行合并B2,则每次合并都必须进行手动合并B1->B2


2
“树冲突”设计文档的链接已烂:(
whitey04

4
有趣的是,即使两个添加的文件相同,它们仍然显示为冲突。确实不应将此标记为冲突。
SantiBailors,2015年

1
@SantiBailors好有趣,我现在快要死了。为我的老朋友吉特而死...

163

我发现了一个帖子,提出了解决方案。它即将运行:

svn resolve --accept working <YourPath>

它将声称本地版本文件为OK。
您可以针对单个文件或整个项目目录运行它。


2
谢谢,这也解决了:C foo.txt>本地添加,更新时传入的添加
lazysoundsystem 2010年

5
谢谢它也为我工作,但我必须这样做:svn resolve --accept working FILENAME
ajacian81

5
是的,您需要一个文件名。它接受“。” (当前目录)。我还需要递归地执行此操作:“ svn resolve --accept working --recursive”。解决所有有利于您的工作副本的问题(危险!这样做可能会像平常解决冲突时一样吹走别人的更改)
哈里·伍德

我使用创建的别名来列出所有与树冲突的文件: alias mtc='stat | awk "BEGIN { FS=\" \" } /^.{6}C/ { print \$NF }"' 然后可以将其用作resolve命令的参数,如下所示: svn resolve --accept working $(mtc)
Earl Jenkins 2012年

1
实际上,您还需要指定资源,例如: svn resolve --accept working path/index.html
Tomasz Kuter 2013年

9

如果要进行的更改是怎么办?我无法运行svn resolve-完全接受

svn resolve --accept base


4
我想我误解了这个问题。实际上,当使用“ svn resolve”时,“ base”等同于“ theirs-full”,但不能解决您的问题。相反,我将其分为两部分:1)删除本地冲突目录(或文件),2)合并。这应该没有冲突,并且因为“传入的更改是您想要的”,所以我不会在意已删除的项目
Gabriel FT Gomes,

2

我设法设法完全遵循我的用户619330的建议。情况是:(1):在最初的分支branch1上工作时添加了一些文件;(2)我创建了一个新分支branch2进行进一步开发,将其从主干分支出来,然后合并了对branch1的更改。(3)一位同事将我的mod从branch1复制到了自己的分支,并添加了更多mod,然后合并回行李箱;(4)现在,我想将最新的更改从主干合并到我当前的工作分支branch2中。这是svn 1.6.17。

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

好吧,不。Branch2另一个副本的更新导致文件的旧版本(主干合并)。因此,现在我有branch2的两个不同的工作副本,据称已更新为同一版本,并具有文件的两个不同版本,并且都坚持认为它们是最新的!签出branch2的干净副本会导致文件的旧版本(预迁移)。我手动将它们更新为主干版本并提交更改,返回到我的第一个工作副本(本来是我最初提交主干更改的),尝试对其进行更新,现在在所涉及的文件上出现校验和错误。吹掉有问题的目录,通过更新获取新版本,最后我有了干线更改后应该是正确的branch2版本。我希望。警告开发人员。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.