技术开发 频道

多个敏捷团队之间的版本控制

大图景

    好,现在我已经给出了如何使用该模式的详细范例。让我们往后站一点儿,看看整个的图景是什么样子吧。

    在主线模型中,一个分支被称为一条代码线(实际上,分支可以被人物是一条代码线的实现)。有时这些被成为流。

    一条代码线的上级(也就是该代码线的起源代码线)被称为它的基线。主线是没有基线的代码线。

    所以在上面的例子中,我们可以总结出:

  • 主干是我们的主线。它不就是没有上级么?
  • 其他所有代码线(发布版本1.0,团队A的工作分支,团队B的工作分支)都以主干作为基线。

    下面是一个更复杂的例子:



 
    这个图告诉我们:

  • 项目X的代码线衍生自主线。该项目目前已完成,所以分支就结束了。
  • 团队A有一个衍生自主线的活跃工作分支。
  • 团队A还有一个衍生自工作分支的、正在进行中的Spike(译注:Spike是指团队集中精力在短时间内尝试实现一个功能的活动。)。
  • 发布版本2.3已关闭,因为2.3已经从生产系统中撤出而且不再会被维护。

    每条代码线有一个相对其基线的坚固水平,也就是说每条代码线要不就比其基线更坚固,要不就不及其基线坚固(更柔软)。

  • 一条坚固的代码线是稳定的,通过测试的,很少变更而且临近发布。
  • 一条柔软的代码线不稳定,很少测试,经常变更而且远离发布。

    在绘制代码线时,坚固的代码线分支向上,而柔软的代码线分支向下。观察上图,我们可以总结出:

  • 发布版本2.3比主线更坚固。
  • 团队A的工作分支比主线更柔软。
  • 团队A的spike比团队A的工作分支更柔软。

    使用上述描述绘制图表,对于展示分支历史来说很有用;但是如果同时有很多分支存在,就可能带来混乱。下面是一个更清晰的格式,仅展示了当前存在的代码线以及它们的衍生出处。


    我建议以此格式绘制你的分支图,而且可以将其挂到团队所在房间的墙上。在讨论集成问题时参考此图真的很有帮助。

    所有的变更都应沿着所在的线索发展,这是一条很重要的规则!所以不能直接从团队A的工作分支向团队B的工作分支中合并代码,这会导致很多混乱。实际上,在团队A工作分支中发生的变更应该流回到主线中,再向下进入到团队B的工作分支中。

    任何位于主线之上的代码线都可以称为发布代码线,意味着一个比主线更坚固的代码线。

    任何位于主线之下的代码线都可以称为开发中代码线(或工作代码线),意味着一个比主线更柔软的代码线。

    协作黄金规则:

  • -总是接受稳定的变更。
  • -绝不强制使用会导致不稳定的变更。

    那么这对于不同类型的代码线意味着什么呢?



 
    上图以彩色的方式说明了:

  • 任何时候在发布代码线上的变更,都应该立即合并到其基线中,并发布到主线上。

    例:在2.4.2版本中修复了一个bug。这应该立即合并到2.4版本中,并将其合并到主线上。

  • 一个发布代码线永远不要从其基线接受变更。

    例:新的代码检入到主线中。该变更不应进入2.3版本和2.4版本。

  • 变更应持续从基线流入到开发代码线中。

    例:任何针对主线的变更应该迅速向下流入到团队A和团队B中,并从团队A向下流入团队A的spike中。

  • 开发代码线的变更只有处于稳定点时才能发布到基线中。

    例:团队B只有在一个故事完成并通过测试后才能向主线合并变更。

    无论变更何时应用到代码线及其基线,有些合并是必须要做的。因为代码合并是一个很容易犯错误的操作,我们希望在两条代码线中稍柔软的一条上进行。一旦合并完成而且通过检验,我们就可以将合并的代码复制回更坚固的代码线。

    将坚固代码线比柔软代码线绘制得更高,使用这个惯例,我们可以推出一个简单的规则:

    规则:向下合并,向上复制

    示例:团队A注意到主线已经更新了。他们将变更向下合并到自己的开发代码线,并修复任何冲突。只要团队A的开发代码线达到稳定的一个点,他们就可以将代码复制回主线。当然,他们必须检查同时主线上没有发生任何变更。

0
相关文章