SVN - 无法将分支合并回主干 - 许多树冲突

Posted

技术标签:

【中文标题】SVN - 无法将分支合并回主干 - 许多树冲突【英文标题】:SVN - unable to merge branch back into trunk - numerous tree-conflicts 【发布时间】:2010-11-03 18:24:41 【问题描述】:

我有一个我认为很简单的场景 - 使用 TortoiseSVN:

1) 我创建了一个应用程序的分支 (B2)(用于实现图像精灵和 JAWR)。

2) 测试和开发在主干上正常进行。

3) 在过去的几天里,我通过以下方式重新建立了几次分支:

3.1) 将主干(按修订范围)合并到我的 branch-b2 工作副本,解决合并期间的冲突。

3.2)(在测试了分支-b2之后),我提交了重新建立的分支-b2。

这一切都如我所料。但是将分支合并回主干对我来说很重要:

4) 在 branch-b2 中提交所有更新之后;我确保在主干和分支 b2 上进行 SVN 更新。

5) 然后,我尝试将分支 b2 中的(修订范围)合并到主干中。但是,对于任何已添加到主干的新文件,然后在我重新设置它时添加到 branch-b2,我都会遇到树冲突。我不确定解决这些冲突的正确方法是什么。

我见过的最典型的建议是从主干中删除树冲突文件,然后合并分支;或者删除整个主干,将分支文件复制过来,然后将它们作为新版本提交到主干中。这两个选项似乎都不是一个好主意——第一个很痛苦,而且似乎它们都会丢失文件修订历史记录。

我做错了什么,我该如何解决?

【问题讨论】:

【参考方案1】:

我想我解决了这个问题。 1.右键单击您合并的“分支”。 2. 点击 Tortoise SVN >> 合并 3.“合并一系列修订”和下一步 4. !!!检查“反向合并”!!! ,从“分支”合并的 URL,具体范围“最近合并的修订版”,和 Next 5. 下一步 6. SVN 提交

之后我可以从分支合并到主干。

【讨论】:

【参考方案2】:

这里有更多信息可以为@Rytmis 的回答做出贡献,这有助于我保持直截了当。

使主干完全像分支或标签的高级步骤:

    从行李箱结帐。 使用主干的工作副本,从主干合并到分支/标签。 提交。

“svn”命令行命令示例:

svn checkout <trunk url>
cd trunk
svn merge <trunk url> <branch/tag url>
svn commit -m "<message>"

【讨论】:

这是一个“2-URL”合并,根据文档,它旨在将两个分支合并为一个(工作目录)。所以这两个 URL 是源,目标是工作目录。可能不是 OP 想要的。【参考方案3】:

在使用 TortoiseSVN 选择“合并一系列版本”选项时选择要合并的版本。这将防止每次合并操作再次出现相同文件的树冲突。

【讨论】:

【参考方案4】:

我无法真正弄清楚上述解决方案是如何工作的,所以我的解决方法有所不同。首先,我确保分支包含主干的所有更改。

1)我得到了一个新的后备箱副本。 2)我使用 tortoise svn export 将分支导出到一个临时位置。 3)我使用 Windows 资源管理器将整个分支树复制到主干并覆盖了所有文件 4)我在 tortoise 上使用了检查更改命令并包含所有未修订的文件复选框。 5)我选择了所有文件并点击添加。

您应该使用尚未构建的解决方案,以便未修订的文件不包含输出。

我等不及我们升级到 1.5+

【讨论】:

【参考方案5】:

我调查了同样的问题。 它是 Tortoise SVN 1.6.5 中的“功能”。 TortoiseSVN 1.5 与我们的存储库 (SVN 1.5) 配合得很好。 TortoiseSVN 1.6.5 变基时将主线中的文件添加为 NEW(不保存合并历史)。 重新集成分支会导致将这些文件视为与主线冲突。

我通过使用 TortoiseSVN 1.6 “重新集成分支”的功能解决了这个问题。它专门用于功能分支。

-- 阿列克谢·科尔松

【讨论】:

谢谢。在关于这个“树冲突”问题的所有讨论中,这个帮助我正确解决了它。【参考方案6】:

听起来您正在使用 1.5 之前的合并样式并尝试将分支重新集成到主干中。在这种情况下,您要做的是首先确保所有主干更改都已合并到分支中,然后不是将分支范围合并到指向主干的工作副本,而是要合并“FROM trunk @HEAD TO branch@HEAD”,工作副本指向主干。本质上:

“给我我需要的所有更改,以使主干与分支相同”。

如果您已经将所有主干更改合并到分支,则此方法有效,因为主干和分支之间的唯一区别是在分支中所做的更改。

有意义吗? :)

【讨论】:

1.5 及以后的版本,您可以跳过第一次合并中的修订范围,并使用“svn merge --reintegrate branch”之类的内容进行第二次合并(不记得 TSVN gui 的细节)。不利的一面是,在重新集成后,您必须重新分支,因为重新集成对 mergeinfo 做了一些有趣的事情。 感谢@Rytmis,我刚刚成功完成,但我想为 Tortoise 用户提供翻译。 1) 将工作副本切换到分支(如果还没有的话) 2) 右键单击​​工作副本,TortoiseSVN > Merge > "Merge a range of revisions",单击 Next 3) URL to merge from = Trunk,单击 Next , Merge 4) 将工作副本切换到 Trunk 5) 右击工作副本,TortoiseSVN > Merge > "Merge two different trees", 点击 Next 6) From: Trunk (使用 HEAD revision) To: Branch (use HEAD revision) 7)单击下一步,合并。 8) 提交您的工作副本。完成 这个解释解决了我们流程中的几个冲突。谢谢大家:) Svn 合并的时候吓到我了 :( 这些说明并不真正适用于 SVN >= 1.5 的版本,而且我早就放弃了使用 SVN 进行除其他人系统的简单结帐以外的任何事情,所以恐怕我在这里帮不了你。 :(

以上是关于SVN - 无法将分支合并回主干 - 许多树冲突的主要内容,如果未能解决你的问题,请参考以下文章

svn版本分支及冲突解决笔记

为啥我在 Subversion 中遇到树冲突?

svn 分支整个项目合并主干

SVN 将主干的代码合并到分支上

SVN 分支到主干合并问题

svn树冲突