代码之家  ›  专栏  ›  技术社区  ›  Paul Dixon

敏捷版本控制?[关闭]

  •  5
  • Paul Dixon  · 技术社区  · 14 年前

    我正试图找到一种好方法来管理一个大型项目中多个团队的代码更改。我们现在使用的是Subversion,但是我希望在构建新的发布时有比我看起来能够使用Subversion更大的灵活性。

    我大概想要:

    • 为每个开发人员创建易于识别的项目补丁。每个补丁提供完整的用户故事(可发布的功能或修复)。它可能包含对许多文件的许多更改。
    • 开发人员能够轻松地应用和删除自己的补丁和其他补丁,以方便测试。
    • Release Manager将在下一个版本中使用的补丁选择到新的分支中
    • 分支被测试、修复合并,并最终合并到Live中
    • 然后,团队可以将这些更改拉回到沙盒中。

    我在看 stacked git 作为实现这一点的一种方式,但是还有哪些其他工具或技术可以提供这种工作流?

    4 回复  |  直到 13 年前
        1
  •  7
  •   Community Erin Dees    7 年前
    < Buff行情>

    我正试图找到一种好方法来管理一个大型项目中多个团队的代码更改。

    < /块引用>

    我强烈建议您阅读Henrik Kniberg的文章 version control for multiple agile teams. on infoq.

    简而言之:

    • 主干包含完成的故事,它有一个可发布的策略(可以随时发布)。
    • 开发是在工作分支(每个团队一个)中完成的,它们有一个更软的策略(单元测试)。
    • 当一个故事完成后,它被从工作分支推到主干。
    • 每天都要完成从主干到工作分支的合并。

    以下是整个冲刺的例子:

    这是亨利克论文的一个非常简化的版本,但这就是精神。它完全符合我们的流程(scrum),并且对我们非常有效。

    PS:顺便说一下,我真的不明白为什么开发人员会在迭代过程中处理发布经理不会为发布选择的东西。

    团队。

    我强烈推荐你读亨利克奈伯格的文章 Version Control for Multiple Agile Teams 在信息网上。

    简而言之:

    • 主干包含完成的故事,它有一个可发布的策略(可以随时发布)。
    • 开发是在工作分支(每个团队一个)中完成的,它们有一个更软的策略(单元测试)。
    • 当一个故事完成后,它被从工作分支推到主干。
    • 每天都要完成从主干到工作分支的合并。

    下面是整个冲刺的一个例子:

    alt text

    这是亨利克论文的一个非常简化的版本,但这就是精神。它完全符合我们的流程(scrum),并且对我们非常有效。

    PS:顺便说一下,我真的不明白为什么开发人员会在迭代过程中处理发布经理不会为发布选择的东西。

        2
  •  1
  •   Jonathan Leffler    13 年前

    如果您的故事是真正孤立的并且非常可加性的(对现有代码行的更改非常小),那么这种方法可能有效。然而,随着工作越来越相互交织,合并将变得越来越困难。

    Duffymo建议的CI环境将有所帮助,但我经验中的那些工具没有很多(或任何)功能来构建项目的许多版本,也不擅长混合/合并分支。

    最好采取更多的等级制度。每个组都应该有自己的CI,然后在适当的时候升级到主版本系统/CI系统(每个组的sprint结束吗?)。这将最大限度地减少团队之间的痛苦互动,但允许项目作为一个整体不断向前推进。如果您有很多组,请添加一些额外的集成级别。

    注意,在这种方法中,单元测试可以停留在组级别,但是您需要找到方法来编写可以跨高层构建工作的集成和系统测试。

    在工具库方面,任何CI工具集都可以工作。对于版本控制,Git和Mercurial支持这种方法(其他人也可以)。

    不完全符合您的要求,但我认为没有很多工具可以解决您想要采用的方法类型。此外,我认为合理数量的故事会导致对现有内容的重构,这将使混合和匹配更改变得困难。

        3
  •  1
  •   user229044 Luis Rodriguez    13 年前

    这是一种一厢情愿的想法,除非,如前所述,每一个特征完全不重叠。这是一个例外,而不是规则。

    一个更好的方法是实际与团队合作,并了解一些特性何时接近完成。让这些分支团队在开发时将它们的分支合并在一起。将它们合并到开发分支中,然后在发布时合并到master中非常容易。

    还有几点需要补充:

    在可能的情况下重新设置基码,特别是在一个功能暂时没有使用的情况下。重新平衡将巩固线性历史中的冲突解决方案。随后的合并或再平衡将不必重新考虑这些决定——在这一点上,回忆可能不那么准确。

    将一个分支合并到另一个分支时,请使用--no ff(无快进)选项。这样可以确保,如果第二个分支没有要合并的提交,则会添加一个空提交,以注意两个分支的合并。如果不这样做,可以松开分支点。这可能是重要信息。

        4
  •  0
  •   duffymo    14 年前

    在我看来,你需要一个持续的集成设施,如巡航控制,哈德逊,巡航,团队城市等。