什么是有用的分支版本策略?

时间:2011-08-23 00:34:13

标签: build versioning

我们已经转向产品版本控制方法,该方法将根据以下格式标记/增加构建:[Major].[Minor].[Build].[Revision/Patch],生产版本将基本上是主要或次要的增量(取决于更改的范围)

这适用于补丁和Trunk构建,但对于分支中的并发功能开发效果不佳 - 特别是因为很可能我们会在分支上构建候选版本而不是合并到Trunk并释放(不是我的首选选项,但不幸的是,这可能更加现实。

无论我们是否合并到主干(或不是),有没有人有任何有用的策略来处理分支版本控制?我们需要能够从分支和主干中唯一地识别构建,并且可能在任何给定时间最终从主干或分支中释放。

一些注意事项:

  • 我们可能事先不知道发布顺序是什么,所以试图在逐个分支的基础上假设次要版本不应该解决问题。
  • 我们可以在产品编号中添加另一个数字来表示分支(如果适用),但它在逻辑上会位于何处?

(轻量级)方案可能有所帮助:

Product X\Trunk (ver 1.1.208.0)
Product X\Branches\Feature A (ver 1.1.239.0)
Product X\Branches\Feature B (ver 1.1.221.0)

编辑:到目前为止我找到的最好的文档位于MSDN,尽管在并发分支的唯一版本化方面有点模糊。

3 个答案:

答案 0 :(得分:4)

经过近两周的思考,StackOverflow和业内人士的对话和反馈,我认为他们是变革管理领域的专家,我们昨天达成了共识。

真正没有正确或错误的答案 - 没有银弹 - 正确处理分支/合并,因为恕我直言,它因企业和产品而异。这就是我们决定继续前进的方式:

无论是主干还是分支,我们将继续根据格式[Major]进行编号。[Minor]。[Build]。[Rebuild]其中rebuilt表示构建版本。分支和主干将不同步(不同的构建号),但这不是问题,因为我们将定义我们的构建配置并明确地删除位置。知道哪个版本部署到哪个服务器是环境管理的责任。

我们可能不会将功能合并到发布分支中,因为我们通常会有更多的发布分支焦点,所以我们将从候选分支中释放并在合并之前在主干(以及其他分支,如果适用)上增加次要版本部署发布后(如果适用),直至主干。

由于每个版本都会引发次要版本增量(补丁除外),因此构建编号永远不会反向。补丁显然会来自prod分支,因此内部版本号会增加。

我想让这个帖子保持开放,让别人写下他们管理分支版本控制的首选技术。

答案 1 :(得分:2)

我们不会为我们的功能分支提供版本号。我们有主要的开发分支,然后为我们创建的每个功能创建功能分支。当该功能完成或部分完成后不会破坏开发分支时,我们会合并回来开发。

在这样做时,开发分支应该有些稳定。我们每周发布一次,所以每周一我们都会在开发时创建一个发布版本,并给出一个版本号。测试人员然后花一两天时间测试这个分支以确保它稳定,然后我们在周二/周三部署。

在我们每周部署时,我们不会过多担心在发布分支中修复小问题。我们在功能分支中执行此操作,或者如果该分支现在直接在开发中完成。发现任何重大问题我们都会在发布,部署和合并中进行修复。

答案 2 :(得分:1)

我不会将版本号绑定到功能分支,因为在并发开发方案中,您可能需要考虑:

  • 只是功能的一部分(并非所有功能都可以在功能中发布)
  • 几个功能(如果一个功能取决于另一个功能),这意味着您需要在新版本中发布多个功能。
  • 次要或主要版本:并非每个稳定点都会增加构建,功能可能会引入次要或重大更改

对于每个新的x.y版本,我宁愿有一个专门的合并分支,我可以合并为下一个版本选择的所有功能分支(因为某些功能可能没有及时准备好),以及x.y部分是有意义的。

换句话说,我会将功能开发周期与发布周期分开。