v1.6中的Subversion分支重新集成[重复]
Posted
技术标签:
【中文标题】v1.6中的Subversion分支重新集成[重复]【英文标题】:Subversion branch reintegration in v1.6 [duplicate] 【发布时间】:2011-03-19 14:02:58 【问题描述】:根据this old question,使用 SVN 1.5,多次重新集成分支是有问题的,应该避免。
有一些大意是“这是一个已知问题,应该在 SVN 1.6 中修复”。是这样吗?是固定的吗?我可以多次重新融合吗?
【问题讨论】:
让我们更具体一些。就这个问题而言,我不在乎我是否应该重新融入社会。那是一个不同的问题。现在,我想知道如何多次重新整合。 是的,它已在 Subversion 1.8 中修复。 【参考方案1】:虽然 1.6 确实修复了合并跟踪的问题,但我认为您不能重复使用集成分支。
但这不是问题。由于分支已完全集成到主干中,只需将其删除并在其位置创建一个新分支(具有相同名称)即可。
【讨论】:
“我不认为你可以......”不是很可信。一个例子,一个更新的参考,不是 v1.5 上的书…… 删除+复制不适用于维护分支。假设我有一条主线(主干)和一个 1.0 分支。我不希望 大部分 在后备箱中,但我当然想转发 v1.0 错误修正。这需要反复重新整合其中一个分支。 @Andres - 我认为您混淆了简单的合并和重新集成。在发布分支 (1.0) 中,将错误修复前向传播到主干就可以了,这不需要重新集成分支 - 它只是某些修订的合并。 这篇文章是我的 svn 合并圣经,可能会有所启发:blogs.open.collab.net/svn/2008/07/subversion-merg.html 虽然 1.6 对创建 mergeinfos 的情况进行了一些清理,但我认为它不会改变 --reintegrate 合并的方式工作。您通常只重新集成功能分支。其余的是普通的旧合并,1.5 和 1.6 都很好地跟踪。 @Andres:你描述的不是重新集成,而是挑选错误修复。【参考方案2】:要将分支主题重复合并到主干中:在每次合并时执行以下操作。
svn merge --reintegrate <topic> <trunk>
,像往常一样。 (=> r
M
)
svn merge --record-only -c M ^/<trunk> <topic>
。 注意record-only
选项。
第 2 步实质上是告诉主题分支考虑合并提交(修订版M
,来自第 1 步)历史的一部分。这种合并修订通常会在重新集成期间引起问题; svn 在第二次集成 topic 时尝试撤消 rM。
所以,重复的重新整合是有效的,只是不会自动进行。 :)
我最终通过enlightening commit message to the svn source 和匹配的test(搜索“def multiple_reintegrates”)找到了这个解决方案。这是 svn-devs 在当前版本中发现和使用的一个“聪明的技巧”。它甚至被添加到more recent documentation。结果仍然不如 DVCS 的合并属性,但它至少是功能性的。
唯一的普遍缺点(根据截至 2010 年 6 月 2 日的 open issue)是 svn log -g
的输出显然是混乱的。我想这就是风险。
【讨论】:
他们最终将此添加到文档中:svnbook.red-bean.com/nightly/en/… 天哪。这种解释会更容易解析。我已将其添加到答案中。 A+ 这个句柄可以从主干合并到分支(反之亦然)吗?即,--record-only the trunk->branch 合并?【参考方案3】:是的,你可以。您询问的问题已在 Subversion 1.8 中解决。
从 SVN 1.8 开始,--reintegrate
选项已弃用,现在重新整合合并自动(或自动 :) )。请参阅Subversion 1.8 Release Notes 并阅读更新的SVNBook 1.8 | Reintegrating a branch 章节:
如果您选择在将分支重新集成到 中继,您可以继续从中继执行同步合并,然后 再次重新整合分支。如果你这样做,只有在 你的分支在第一次重新整合后被合并到主干。
...
只有 Subversion 1.8 支持功能分支的这种重用。早些时候 版本需要一些特殊处理才能成为功能分支 不止一次重新整合。参见本章的早期版本 了解更多信息: http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate
重要提示: 如果您仍然使用 Subversion 1.7 或更早版本,您应该升级您的 Subversion 客户端和服务器。 SVN 的当前和最佳版本是 2016 年的 1.9。没有真正的理由使用非常旧的 Subversion 版本,例如 1.5、1.6 甚至 1.7。自 1.6 版以来,客户端和服务器端有许多改进!
【讨论】:
以上是关于v1.6中的Subversion分支重新集成[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Subversion存储库中“分支”,“标记”和“主干”的含义是什么?