如何在Subversion中管理多个发布分支?

7
在我工作的公司中,我们使用Subversion和TortoiseSVN来管理我们的源代码。每个项目都是从主干分支出来的。当我们需要将不同的项目集成到一个发布版本中时,我们会创建一个包含将要集成、测试和部署到生产环境中的代码的发布分支。通常情况下,我们只有一个发布分支。
然而,最近,一个项目中的一些内容被推迟,计划放到下一个版本中。因此,有人请求创建第二个发布分支来保存这些延迟的更改,并防止它们合并到当前版本中。
到目前为止,这给我们带来了很多麻烦和许多树冲突,因为未来版本分支中的某些项目依赖于当前版本分支中的项目。我们解决这些问题的唯一方法是等待当前版本发布,将发布分支合并到主干分支,将主干分支合并到未来版本分支,然后将项目分支的更改合并到未来版本分支中。
由于这个问题,我们不得不建议永远不要有多个发布分支,因为这会引起合并问题。
然而,我想知道这是否是正确的做法。有没有人知道在Subversion中管理多个发布分支是否可能?肯定能够管理延迟的功能,而不会影响合并的能力。
有没有人在这里遇到过我提出的场景并愿意分享经验?我只是想知道如何改进我们工作场所的版本管理方式,以免再次发生此类情况。

“每个项目都是从主干分支出来的”是什么意思?你是指使用功能分支吗? - Wim Coenen
@wcoenen 我不太确定如何解释。我打算稍后更新我的问题,并附上一个图表,以希望使事情更清晰。不幸的是,最了解我们分支程序的人要到周一才能回来。 - mezoid
5个回答

8
说实话,从描述中我并不完全确定您的系统是如何工作的。 然而,在过去管理多个实时版本的项目中,我们采取的做法是:
  1. 没有任何未经过Trunk的发布。
  2. 每个版本都有自己的版本分支。
  3. 更新版本分支的唯一途径是从Trunk合并。
这样我们就可以挑选哪些功能应该在哪个版本中。使用合并跟踪,也能让我们构建一个网页,直观地显示了各个版本之间的关系。
关键是要有一个完全集成的分支供挑选 - 这是我对Trunk的定义。
这并不是一种完美的系统。如果跳过版本,则会出现依赖问题,我们真的需要图形化显示来展示各个版本的情况,但整体看来效果不错。
还请参阅我的回答这里

1

这并不是乌龟的强项。要处理复杂的合并和分支场景,您需要像ClearCase Config Spec这样的工具来进行版本控制。

如果您使用乌龟,最好将主干保持原样,然后在主干上运行持续集成,或者为每个功能创建分支,在功能开发完成后将其合并回来。如果这样做,那么您只会在主干上拥有经过测试的代码。然后选择一个发布点,进行集成,并将所需的修复程序带回到您的主干,同时允许您的团队继续开发。


0

我认为你想要合并跟踪,可以通过svnmerge.py实现,或者通过Subversion 1.5内置的合并跟踪实现。这使你能够阻止某些更改被合并到分支中,然后可以将其应用于所有与仅想要合并到下一个发布的功能相关的更改。


0
你几乎总是希望第一个延迟分支上的更改出现在第二个分支中。因此,第二个发布分支应该从第一个发布分支创建,并且应定期合并第一个分支的更改。最好由最初进行更改的同一人员执行合并。
在这种情况下,Spepladder(?)分支将起到很好的作用--只需放弃主干并向上爬升。

0

我的公司也遇到了类似的问题。

我们有一个项目延迟了一个版本,我们称之为2.0,延迟了几个月。同时,我们在当前分支上遇到了生产问题,我们称之为1.5,这需要更多的发布。我们不能使用主干,因为它有禁止使用的功能,所以我们开始从分支进行分支。我们的1.6版本是从1.5分支而不是主干分支创建的。除了命名约定外,1.6版本实际上与1.5.1没有什么区别。由于这不是标准操作程序,我们一直非常小心地记录我们正在做的事情。

我并不期待合并点,即我们最终将1.6分支和2.0合并在一起的时候。我们无法将1.6上的更改合并回主干或2.0,因为这只会使2.0的QA问题更加严重。我们正在运行Subversion 1.4.6,所以软件无法提供帮助--所有合并都必须手动完成。


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