在Subversion中将功能分支合并到主线的最佳方法是什么?

时间:2008-11-06 18:18:34

标签: svn

我们在Subversion中使用功能分支进行开发,这是一种非常方便的方法,可以将代码保留在尚未为主线准备的版本控制中。但是,每当我将功能分支修订版合并到主线时,都会很痛苦。现在我将完成以下步骤:

  1. 查看原始功能分支修订到新目录
  2. 使用Beyond Compare
  3. 等工具在我当前的开发和原始功能分支目录之间执行区别
  4. 查看新目录的当前主线修订
  5. 将新/已更改的文件合​​并到当前主线目录中。
  6. 使用我的IDE执行差异,以确保所有文件都已正确检出/添加到subversion
  7. 编译和测试
  8. 提交
  9. 在我看来,在这个过程中有很多错误的余地,每次走完这些步骤都会让我感到紧张。当然,在我的功能分支上检查所有内容都是Subversion,因此任何步骤的错误都是可以恢复的。

    我相信Subversion 1.5有一种方法可以将分支合并到主线,但我们仍在使用Subversion 1.4。还有哪些人用来简化将Subversion中的功能分支合并到主线开发中的步骤?你在使用不同的工具吗?您是否正在使用Subversion 1.5中的合并功能?

4 个答案:

答案 0 :(得分:6)

我现在正在使用Subversion 1.5的新的--reintegrate功能,我认为这很棒。它比手动方式更容易,更不容易出错。然而,缺点是新的合并功能要求存储库和客户端都在1.5上,并且1.5存储库的更改不允许1.5以外的任何客户端使用...所以为了获得合并功能,它基本上是全有或全无的情况。

关于您的原始问题,您只需要非常严格地跟踪在开发过程中您已合并到工作分支的主要分支修订版。但是,即使使用1.5的--reintegrate功能,确保主分支的重新集成的工作副本看起来正确并在提交之前进行编译仍然很重要。它基本上使生活变得更加容易(特别是对于寿命更长的功能分支),因为您不必严格记录已更改的内容以及何时将其他分支的更改集成到功能分支中。 / p>

subversion.tigris.org上的发行说明文档编写得非常好,我建议您简单地查看它,以查看1.4和1.5之间的所有更改以及对新合并工具的良好描述。

答案 1 :(得分: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-book中了解更多相关信息。

答案 2 :(得分:2)

如果您的分支机构想要合并回主线分支(即您不是为其他开发人员执行此操作的集成商),那么您需要执行以下操作:

  • 记下上次将主线合并到分支中的修订版(以使其保持同步)。我们称之为“LASTSYNC”
  • 检查主线分支到新目录(如MergeFeatureBranchToTrunk),构建它
  • 在该分支中,使用svn merge "LASTSYNC":HEAD svn://path/to/FeatureBranch .
  • 解决冲突(如果有)
  • 编译
  • 测试
  • 使用差异工具检查您的更改,以确保一切正常
  • 提交回主线

答案 3 :(得分:1)

看看svnmerge;它记录了“我合并了什么?我选择了什么不合并?”为你工作的一部分,并依靠svn的“合并”命令来完成繁重的任务。