【问题标题】:SVN Branching/Merging with feature branch and Production branchSVN 分支/合并功能分支和生产分支
【发布时间】:2013-09-11 03:26:03
【问题描述】:

由于我们是在已部署的系统上进行开发,因此我们正在尝试更好地利用分支——直到最近,几乎所有东西都被检入到主干中,部署到测试/登台然后生产。这意味着我们在“测试”期间必须非常小心,我们仍然偶尔会在几乎没有测试的情况下将不需要的更改发送到服务器。

我的想法是,最好的方法是“次要”补丁直接进入主干,主要功能成为功能分支,在完成后重新集成到主干,"Production" branch 始终与我们可以合并的服务器状态匹配就在部署之前。

这里提供的主要好处是,您可以选择将哪些更改推出到生产环境中——如果您愿意,您可以获取单个签入或分支并将其发送到生产环境,而无需涉及所有其他分支。

另一方面,最好让分支经常与主干集成——拉起更改,这样它们就不会累积并进行令人讨厌的合并。

因此,这两种模式可能会导致您希望将分支与生产合并以引入重要功能,但该分支已经从主干“拉入”了您不想发布的更改。

SVN 可以处理这个吗?对于每两周部署一次的代码开发团队来说,真的有很好的做法吗?

【问题讨论】:

  • 您想将功能合并到生产而不将其合并到主干吗?
  • 使用 Subversion 1.8 会有更好的运气。它对合并引擎进行了一些重大改进,特别是对于兄弟合并等更高级的用例。
  • 就我个人而言,我会将主干视为王道:那里没有发生任何开发,仅从主干创建的功能分支合并。你在一个特性分支上做你通常的 QA,一旦它被签署,就将它合并回主干。然后,标记主干并将其推向生产。新功能从主干分支出来,循环又开始了。如果有必须立即修复的错误,请在标记的修订版处创建一个错误修复分支,修复错误,进行 QA,然后再次合并,标记并发布到生产环境。一旦你发布了几个版本,就很容易遵循这个工作流程。只是我的两分钱。
  • @Sameer 这似乎与用于“生产”分支的过程完全一样,但在不同的地方,我对此非常满意,但在什么时候测试你的功能集成(不是开发测试,但允许 QA 在发货前测试整个功能集?)
  • 我的团队实践敏捷。我们有每日例会、每周冲刺,两周后我们通常会进行 QA,合并签核后并部署到生产环境。在第一个星期一的 scrum 中,团队挑选了本周的一些 bug 和特性,在随后的每个 scrum 中,团队检查已经取得的进展。两周后(实际上是第二个星期三),我们有一组已完成的任务(修复了错误,添加了功能),可以发送给 QA。到周五,我们将获得批准,可以合并并部署到生产环境中。

标签: svn branching-and-merging


【解决方案1】:

我认为您所描述的所有内容都可以使用(当前版本,如 1.7 或 1.8 的)Subversion。以下是要采取的步骤:

  1. 描述您的分支(和合并)策略。你不能轻易地将它们混合在一起,开发人员也很难知道在哪里使用了哪种策略,因此文档和沟通是这里的关键。请参阅以下资源:
  2. 您将使用以下内容:
    • 生产版本的发布分支,补丁直接在那里开发。对于每个补丁,您必须决定该补丁是否应该在下一个版本中可用(以相同的形式)。
    • 使用主干进行主要开发。您确定将在下一个版本中发布的所有内容都应该在主干上开发。不要从主干合并到(发布)分支。永远不会!!
    • 仅当您不确定某个功能是否会进入下一个版本时才使用功能分支。功能分支(在 Subversion 中)比例如在 Git 中,所以应该有理由使用它们。定期将所有更改从主干合并到功能分支,并仅在最后将功能集成到主干时重新集成(以使其进入下一个版本)。
  3. 找到执行分支和合并的正确时间点:
    • 分支:何时需要稳定发布分支(以集成到下一个版本),何时可以开始下一个版本的开发(然后再次在主干上)?
    • 合并:何时是合并更改的最佳时间:立即,当更改新鲜时;不时定期; (希望不会)最后只有一次。

随着时间的推移,您的分支将像这样开发:

  1. 您从第一个版本 1.0 的主干(并且只有主干)开始。
  2. 当您想要对 1.0 版进行集成测试时,您可以对主干进行分支,然后开始为 1.1 版(在主干上)进行开发。
  3. 您交付 1.0 版,然后直接从分支提供补丁。
  4. 当您想要对 1.1 版进行集成测试时,您可以对主干进行分支,然后在主干上开始开发 1.2(或 2.0)版。
  5. ...等等...

Branching and Merging 的 SVN 红皮书解释了您在技术上需要的一切,但不太清楚如何在不同的业务环境中做到这一点(我个人的看法)。我没有找到足够详细地解释所有选项和驱动程序的资源...

【讨论】:

  • 有什么方法可以处理一个特性被检入主干,其他特性分支合并这些更改然后重新集成到主干的情况——但是你想在没有第一个特性的情况下发布?
  • 只是在玩 SVN,我想我已经回答了我自己的问题——“恢复此修订版所做的更改”似乎做得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 2017-10-11
相关资源
最近更新 更多