处理SVN分支的重复合并的正确方法是什么?

处理SVN分支的重复合并的正确方法是什么?,svn,tortoisesvn,merge,branch,Svn,Tortoisesvn,Merge,Branch,这里我们有一个SVN存储库,它有一个主干和一个分支,用于在新版本上开发 分支现在即将准备发布,所以我决定将分支重新整合回主干。显然有一些冲突。在主干中删除的文件中包含了相当多的树冲突 我很高兴地解决了所有的冲突,并把箱子交了出去 问题是,我们随后对分支做了一些小的更改,所以我再次去重新整合分支,所有相同的树冲突都发生了。解决这些问题不是问题,但是有很多问题,手动检查和解决这些问题需要一段时间,我不想每次进行更改和重新整合时都要经历相同的解决过程。我曾期望SVN认识到该分支机构已经重新整合一次,并

这里我们有一个SVN存储库,它有一个主干和一个分支,用于在新版本上开发

分支现在即将准备发布,所以我决定将分支重新整合回主干。显然有一些冲突。在主干中删除的文件中包含了相当多的树冲突

我很高兴地解决了所有的冲突,并把箱子交了出去

问题是,我们随后对分支做了一些小的更改,所以我再次去重新整合分支,所有相同的树冲突都发生了。解决这些问题不是问题,但是有很多问题,手动检查和解决这些问题需要一段时间,我不想每次进行更改和重新整合时都要经历相同的解决过程。我曾期望SVN认识到该分支机构已经重新整合一次,并且仅从上次重新整合发生时开始合并

当我打开修订图时,它显示主干和分支被拆分的点,但不显示合并。应该吗

服务器:WinServer2003(R2sp2)、VisualSVNServer(1.7.2)。 客户端:WindowsXP(sp3),我一直在使用TortoiseSVN(1.6.5)来完成所有这一切,但我也安装了命令行客户端

我通过确保主干是最新的来进行合并,并使用TortoiseSVN进行合并,当显示选项对话框时,我选择“重新整合分支”。我将合并深度设置为“工作副本”

我是否错误地处理了这个场景?我应该做些不同的事情吗


(可能我们的存储库布局有误。我们从主干分支,在分支中对新版本进行了所有更改,现在版本即将发布,我们正在将分支合并回主干。可能这是错误的方法,我读过一些人反过来做,在主干中进行所有更改,然后进行更新。)ch仅当您即将准备发布且分支成为受支持的发布版本时)

以下内容摘自SVN手册的末尾:

在Subversion 1.5中,一旦从一个分支到另一个分支完成了--重新集成合并,该分支就不再可用于进一步的工作。它不能正确地吸收新的主干更改,也不能正确地重新集成到主干中。因此,如果您想继续处理功能分支,建议将其销毁,然后重新创建从后备箱里取的


在这种情况下,在完成开发之前,我不会将代码从分支合并到主干

我会从一个主干合并到另一个分支,以确保您的分支对应用到主干的任何修复都是最新的。定期执行此活动以确保您的开发分支包含所有修复。然后在开发成为实时版本时,作为一次性活动从一个分支合并到主干

我的回答提出了一些假设,包括:

  • 你有活的树干和德夫 分支机构
  • 你只有一个活着的孩子 版本(即不维护旧版本 版本)
希望这会有所帮助。

现在实际上可以进行重复的双向合并 一句警告的话。这个答案解释了它是如何完成的,但是如果你错过了任何一个步骤,你会感到抱歉。例如,--reintegrate合并必须是非常简单的(分支中所有的差异都已经解决了)否则,当您继续在分支中工作时,您将无法获得在--reintegrate merge步骤中所做的更改。另一种方法是在--reintegrate之后每次删除并重新创建分支


至少在svn版本1.6及更高版本中,您可以重复进行双向合并。您可以使用svn merge任意多次地将“主”分支合并到子分支,但每次将分支合并回主分支时,您都必须提供选项

如其他答案所述

您还需要做的是告诉您的分支,您在第二个手动步骤(该分支已签出并更新)中使用命令集成了它

svn merge --record-only -c 391 ^/calc/trunk
391这里表示刚刚在calc/trunk中执行的--reintegrate分支提交中的合并提交编号

如果您错过了该步骤,它可能仍然有效,或者您可能需要在下次合并时重新解决已解决的合并冲突。在“仅记录”步骤之后,您的分支已准备好进行进一步的工作或合并。 这是很愚蠢的(特别是如果你像我一样被Git宠坏了,事情就是这样),但是如果你按照这个惯例去做,它就会起作用,而且两个分支都会为新的提交打开


整个事情都记录在SVN的书中

此合并使用了引入的cherry picking合并语法 在“樱桃采摘”部分。继续运行 “重新整合分支”一节中的示例,其中 第X版为第391版:

现在,您的分支已准备好再次吸收来自主干的更改。在将分支再次同步到主干后,您甚至可以再次重新整合该分支。如有必要,您可以执行另一次仅记录合并以保持分支活动。请清洗并重复


答对了。这正是我一直在寻找的——确认我的假设是无效的。我知道它会出现在dam手册中,只是找到了相关的部分。谢谢。
$ cd my-calc-branch $ svn update Updating '.': Updated to revision
393. $ svn merge --record-only -c 391 ^/calc/trunk
--- Recording mergeinfo for merge of r391 into '.':  U   . $ svn commit -m "Block revision 391 from being merged into my-calc-branch."
 Sending        .

 Committed revision 394.