2009-06-17 175 views
51

我有什么,我认为是一个简单的方案 - 使用TortoiseSVN:SVN - 无法合并分支回主干 - 许多树冲突

1)我做了一个应用程序的一个分支(B2)(上下工夫实现图像精灵& JAWR)。

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

3)我重新基于分支几次在过去数天:

3.1)合并干线(由修订版本的范围),以我的分支B2工作拷贝,在合并过程中解决冲突。

3.2)(在测试分支-b2之后),我提交了基于分支的分支-b2。

这一切都按我的预期工作。但将分支合并回主干与我有关:

4)在分支-b2中提交的所有更新;我确定我在trunk和branch-b2上执行SVN更新。

5)然后,我尝试从分支-b2合并(修订范围)到主干。但是,对于已添加到主干中的任何新文件,随后在重新分支时将其添加到分支b2中,我会发生树状冲突。我不确定解决这些冲突的正确方法。

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

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

回答

71

听起来就像您使用1.5版之前的合并样式并试图将分支重新整合到主干中。在这种情况下,你想要做的是首先确保所有树干更改已合并到分支中,然后代替范围合并分支到指向树干的工作副本,则要合并“FROM trunk @HEAD TO分支@ HEAD“,工作副本指向主干。实质上:

“给我所有的变化,我需要使树干与分支相同”。

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

有意义吗? :)

+0

这很有道理 - 将在a.m.中首次出现。出于好奇和对未来健康的渴望,什么是1.5后合并风格? – 2009-06-17 20:46:40

+2

1.5及以后,您可以跳过第一次合并中的版本范围,并使用“svn merge --reintegrate branch”作为第二次合并(无法回想TSVN gui特性)。不利的一面是,在重新集成之后,你必须重新分支,因为重新合并对mergeinfo有一些有趣的地方。 – Rytmis 2009-06-18 04:34:22

+52

谢谢@Rytmis,我只是设法解决这个问题,但我想为乌龟用户提供翻译。 1)将您的工作副本切换到分支(如果它尚未) 2)右键单击工作副本TortoiseSVN>合并>“合并一系列修订”,单击下一步 3)从= Trunk合并的URL ,点击下一步,合并 4)将工作副本切换到主干 5)右键单击工作副本TortoiseSVN>合并>“合并两棵不同的树”,单击下一步 6)From:Trunk(使用HEAD修订版) To:Branch (使用HEAD修订版) 7)单击下一步,合并。8)提交您的工作副本。 完成 – mikesigs 2010-08-19 21:50:55

3

我调查了同样的问题。 这是Tortoise SVN 1.6.5中的“特性”。 TortoiseSVN 1.5在我们的资料库(SVN 1.5)下正常工作。 TortoiseSVN 1.6.5当重新绑定将主线文件添加为NEW(不保存合并历史记录)时。
并重新分支分支处理这些文件与主线冲突。

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

- 阿列克谢·科尔松

1

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

1)我得到了一个新的干线副本。 2)我使用龟svn导出将分支导出到临时位置。 3)我用Windows资源管理器将整个分支树复制到树干并覆盖所有文件4)我使用了对龟的更改命令进行检查,并包含所有未经检查的文件复选框。 5)我选择了所有文件并单击添加。

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

我不能等到我们升级到1.5以上

1

选择修改,同时选择“合并范围rivisions的”使用TortoiseSVN选项合并。这将防止每次合并操作再次出现相同文件的树冲突。

1

这里有一些更多的信息有助于@Rytmis答案,这有助于我保持直线。

使得后备箱完全像一个分支或标记的高级别步骤:从树干

  1. 结帐。
  2. 使用trunk的工作副本,从trunk中合并到branch/tag。
  3. 提交。

实施例 '的svn' 命令行命令:

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

我认为解决了这个问题。 1.右键单击您合并的“分支”。 2.点击Tortoise SVN >>合并 3.“合并一系列修订”和下一个 4. !!!检查“反向合并”! ,URL从“分支”合并,特定范围“最近合并修订”,而下一步 5.接下来 6. SVN Commite

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