我认为这是一个简单的场景 - 使用TortoiseSVN:
1)我创建了一个应用程序的分支(B2)(用于实现图像精灵和JAWR)。
2)测试&开发在主干上正常进行。
3)在过去的几天里,我通过以下几次重新设立了分支机构:
3.1)合并主干(按修订范围)到我的branch-b2工作副本,解决合并期间的冲突。
3.2)(在测试branch-b2之后),我提交了基于重新分支的分支-b2。
这一切都像我预期的那样奏效。但是将分支合并到主干中是有道理的:
4)在branch-b2中提交所有更新后;我确保在trunk和branch-b2上进行SVN更新。
5)然后,我尝试将branch-b2中的(修订范围)合并到主干中。但是,对于任何已添加到主干的新文件,以及随后在我重新添加时添加到branch-b2的新文件,我会遇到树冲突。我不确定解决这些冲突的正确方法是什么。
我见过的最典型的建议是从trunk中删除树冲突文件,然后合并分支;或者删除整个中继,将分支文件复制过来,然后在中继中将它们作为新版本提交。这些选项似乎都不是一个好主意 - 首先是痛苦,而且看起来他们都会丢失文件修订历史。
我做错了什么,我该如何解决?
答案 0 :(得分:71)
听起来你正在使用1.5之前的合并样式并尝试将分支重新集成到主干中。在这种情况下,您要做的是首先确保所有主干更改已合并到分支,然后将分支范围合并到指向主干的工作副本,而不是合并“FROM trunk @HEAD TO分支@HEAD“,工作副本指向trunk。实质上:
“给我所需的所有更改,使树干与树枝相同”。
如果您已将所有主干更改合并到分支,则此方法有效,因为树干和分支之间的唯一区别是分支中所做的更改。
有意义吗? :)
答案 1 :(得分:3)
我通过使用TortoiseSVN 1.6“reintegrate branch”的功能解决了这个问题。它专门用于功能分支。
- Alexey Korsun
答案 2 :(得分:2)
这里有更多信息可以为@Rytmis做出贡献,这有助于我保持这一点。
使树干完全像分支或标记的高级步骤:
示例' svn'命令行命令:
svn checkout <trunk url>
cd trunk
svn merge <trunk url> <branch/tag url>
svn commit -m "<message>"
答案 3 :(得分:1)
我无法弄清楚上述解决方案是如何工作的,所以我的工作方式不同。首先,我确保分支包含来自主干的所有更改。
1)我得到了一个新的行李箱副本。 2)我使用tortoise svn export将分支导出到临时位置。 3)我使用Windows资源管理器将整个分支树复制到主干并覆盖所有文件4)我在乌龟上使用了check for changes命令并包含所有未查看的文件复选框。 5)我选择了所有文件,然后点击添加。
您应该使用尚未构建的解决方案,以便未预见的文件不包含输出。
我等不及升级到1.5 +
答案 4 :(得分:1)
使用TortoiseSVN选择“合并一系列交叉”选项时选择合并修订。这将防止每次合并操作再次出现相同文件的树冲突。
答案 5 :(得分:0)
我想我解决了这个问题。 1.右键单击&#34;分支&#34;你合并了。 2.单击Tortoise SVN&gt;&gt;合并 3.&#34;合并一系列修订&#34;接下来 4. !!!检查&#34;反向合并&#34; !!! ,来自&#34;分支&#34;的合并的URL,特定范围&#34;最近合并的版本&#34;,和Next 5.接下来 6. SVN Commite
之后我可以从分支合并到主干。