在Subversion中,将一个特性分支合并到主干的最佳方法是什么?

6
我们在Subversion中使用功能分支进行开发,这是一种非常方便的方式,可以将尚未准备好进入主干的代码保留在版本控制中。然而,每当我要将功能分支合并到主干时,都会很麻烦。目前,我需要执行以下步骤:
  1. 将原始功能分支版本检出到新目录
  2. 使用Beyond Compare等工具对当前开发和原始功能分支目录进行比较
  3. 将当前主干版本检出到新目录
  4. 将新更改的文件合并到当前主干目录中。
  5. 使用我的IDE进行差异比较,确保所有文件已正确检出/添加到Subversion
  6. 编译和测试
  7. 提交
我认为这个过程存在很多错误的空间,每次走这些步骤都让我感到紧张。当然,在我的功能分支中,所有内容都已经检入了Subversion,因此任何步骤的错误都是可恢复的。
我相信Subversion 1.5有一种将分支合并到主干的方法,但我们仍在使用Subversion 1.4。其他人在将功能分支合并到Subversion主干开发中时,是否使用了简化步骤的工具?您是否使用不同的工具?是否利用了Subversion 1.5中的合并功能?

我按照相同步骤,但使用SourceGear的DiffMerge作为我的比较工具。 这是一个令人讨厌的问题,我认为TFS做得非常好,我很想念它。 - cfeduke
在升级到1.5之前(我很幸运),我使用了完全相同的步骤和工具(Beyond Compare 3,非常好用)。虽然这是费时且有时乏味的过程,但我从未遇到问题。有了SVN 1.5(见下文),生活变得轻松多了... - Dan
4个回答

6
我目前正在使用Subversion 1.5的新--reintegrate功能,我认为它非常棒。这比手动方式更容易且出错率更低。然而,新的合并功能需要仓库和客户端都在1.5上,并且对1.5仓库的更改排除了任何其他客户端使用...因此,要获取合并功能,基本上是全有或全无的情况。
至于您最初的问题,您只需要非常严格地跟踪您在开发期间已将哪些主分支修订合并到工作分支中。即使使用1.5的--reintegrate功能,确保重新集成的主分支工作副本在提交之前看起来正确且能够编译仍然很重要。这只是基本上使生活变得更轻松(特别是对于长期存在的特性分支),因为您不必记录您已更改的内容以及何时将更改从其他分支集成到特性分支中。
subversion.tigris.org的发布说明文档写得非常好,我建议简要查看一下,以了解1.4和1.5之间的所有更改以及新合并设施的详细描述。

很好的解释。我最近升级到1.5,发现它比1.4有了重大的改进。你上面的描述非常准确。 - Dan
真的很值得升级到1.5版本,合并跟踪所带来的功能绝对值得这个努力。 - Jim T

3
步骤1、2、4和5已经集成在subversion中,命令'svn merge'就可以实现。在您的主干工作副本中键入'svn merge -r startrev:lastref svn://repository/branchurl'。其中startref和lastref将表示应该合并到主干中的修订窗口。'svn://repository/branchurl'应为您分支的URL。
Subversion 1.5提供了更好的支持。您不再需要指定要合并的修订版本,因为subversion现在保留有关合并的信息,并简单地合并尚未合并的所有修订版本。
Subversion书籍中了解更多信息。

2
如果你想将你的分支合并回主干分支(即你不是为其他开发人员执行此操作的集成器),请按照以下步骤操作:
  • 记录下你上次将主干合并到你的分支的修订版本号(以保持同步)。我们称之为“LASTSYNC”
  • 将主干分支检出到一个新目录中(如MergeFeatureBranchToTrunk),进行构建
  • 在该分支中使用svn merge "LASTSYNC":HEAD svn://path/to/FeatureBranch .
  • 解决冲突(如果有的话)
  • 编译
  • 测试
  • 使用差异工具检查你的更改,确保一切看起来都很好
  • 提交回主干

1

看一下 svnmerge;它会为您跟踪“我已合并了什么?我选择不合并了什么?”部分,并依赖于svn的“合并”命令来完成繁重的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接