当一个分支重新整合到主干时,那个分支实际上是死的吗?
您可以在重新集成后对分支进行修改并在以后将它们合并回主干吗?
你可以从技术上做到这一点,你的分支没有死也没有被禁用,但不建议在重新集成后从分支合并到主干。
您可以在此处找到有关其原因的完整讨论:Subversion merge reintegrate
基本上,它说,可以将您的更改再次合并到主干,但是由于重新集成迫使您在重新集成操作之前从主干合并到分支,您将面临反射/循环合并,这在 Subversion 1.5 中是非常有问题的.
根据文章,建议在重新集成后立即删除重新集成的分支,并创建一个具有相同(或不同)名称的新分支。
这是一个已知的 Subversion 行为,将在未来版本中解决(可能在 1.6 中)
实际上,您需要--record-only
从主干合并到--reintegrate
提交创建的修订分支:
$ cd trunk
$ svn merge --reintegrate ^my-branch
$ svn commit
Committed revision 555.
# This revision is ^^^^ important
现在你记录下来
$ cd my-branch
$ svn merge --record-only -c 555 ^trunk
$ svn commit
你很高兴现在保留分支
更多信息在第 4 章。分支和合并,高级合并。
从分支重新集成到主干后,您应该执行以下两项操作之一:
删除你的分支。这是最简单的,但它使查看分支的历史变得更加困难。
告诉你的分支不要合并 reintegrate commit。如果您重新集成到主干,并将其作为修订版 X 提交,您可以在您的分支上运行此命令:svn merge --record-only -c X url-to-trunk
. 但是,如果您在提交过程中进行了任何更改,而不是合并本身,则不应执行此操作。任何其他更改将永远不会回到您的分支。
如果有人多次对分支进行更改(1.5 之前),有关合并更改的一些建议:记住您在哪个修订版中进行了合并!要么在某处写下修订号,要么(更容易)制作一个标签。(你当然可以稍后找到它,但那是一个 PITA。)
例子:
你有一个这样的存储库布局:
/your_project
/trunk
/branches
/tags
假设它是一个 Web 应用程序,并且您计划发布。您将创建一个标签,并从该标签(或从主干)创建一个用于修复错误的分支:
/your_project
/trunk
/branches
/1.0.0-bugfixes
/tags
/1.0.0
这样做,您可以在主干中集成新功能。所有错误修复都只会在错误修复分支内发生,并且在每次发布之前,您都会为当前版本制作一个标签(现在来自错误修复分支)。
假设您进行了大量的错误修复并将其发布到生产服务器,并且您在当前主干中迫切需要其中一个功能:
/your_project
/trunk
/branches
/1.0.0-bugfixes
/tags
/1.0.0
/1.0.1
/1.0.2
您现在可以将 1.0.0 和 1.0.2 之间的更改集成到您的主干中(假设您在您的工作副本中):
svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .
这是你应该记住的。您已经在主干上合并了 1.0.0 和 1.0.2 之间的更改。假设当前生产版本中有更多变化:
/your_project
/trunk
/branches
/1.0.0-bugfixes
/tags
/1.0.0
/1.0.1
/1.0.2
/1.0.3
/1.0.4
您现在已准备好从主干发布新版本,但您的错误修正的最后更改仍然缺失:
svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .
现在您已将所有更改合并到您的主干上,您可以发布您的版本(不要忘记先测试它)。
/your_project
/trunk
/branches
/1.0.0-bugfixes
/1.1.0-bugfixes
/tags
/1.0.0
/1.0.1
/1.0.2
/1.0.3
/1.0.4
/1.1.0
不,树枝还活着,但是,那一刻,它和树干一模一样。如果你继续在分支上开发,你可以在以后自由地与主干重新合并。
正如每个人在这里已经说过的那样:分支并没有死,对分支的提交可以继续进行。
有时虽然你想在合并后杀死分支。唯一可靠的解决方案是删除分支。不利的一面是,如果您想查看它,则很难再次找到该分支,例如,出于历史原因。因此,许多人将“重要”分支留在周围,并同意不更改它们。我希望有一种方法可以将分支标记为死/只读,从而确保在另行通知之前没有人可以提交它。
您可以根据需要多次从分支合并到主干,或从主干合并到分支。
首先,如果您仍然使用 Subversion 1.7 或更早版本,您应该升级您的 Subversion 客户端和服务器。没有理由使用非常旧的 Subversion 版本。截至 2016 年,当前版本是 Subversion 1.9。现在也支持 SVN 1.8,并且仍然会收到错误修复。
您询问的问题已在 Subversion 1.8 中解决。从 SVN 1.8 开始,--reintegrate
选项已弃用。现在自动执行重新整合合并。请参阅与改进相关的 Subversion 1.8 发行说明条目。
如果您选择在将分支重新集成到主干后不删除它,您可以继续从主干执行同步合并,然后再次重新集成分支。如果这样做,则只有在第一次重新集成后对分支所做的更改才会合并到主干。
...
只有 Subversion 1.8 支持功能分支的这种重用。早期版本需要进行一些特殊处理,然后才能多次重新集成功能分支。有关详细信息,请参阅本章的早期版本:http: //svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate
当您进行合并时,您指定目标。如果您愿意,可以将 TreeA 和 TreeB 的差异合并到 TreeC。正如克里斯暗示的那样,您的问题并没有那么大的意义。如果将分支合并到主干中,则分支保持不变。如果以后不需要该分支,您可以将其删除。
您可以继续在分支上进行开发,您需要的功能是 Subversion 1.5 中的合并跟踪,这意味着来自分支的额外合并仅包含新更改。