代码之家  ›  专栏  ›  技术社区  ›  Matt Rogish

web应用程序的源代码管理策略-分支、标记、分叉等

  •  2
  • Matt Rogish  · 技术社区  · 16 年前

    这是我的帖子( How do you manage database revisions on a medium sized project with branches? )让我想知道如何最好地使用分支和部署到开发、登台和生产(以及本地副本)来处理web项目。

    我们没有“发布”本身:如果一个功能足够大以至于引人注目,我们会将其上线(在必要的测试/等之后),否则我们会批量推出一些,当它感觉“舒适”时,就会上线。我们的目标是一个月内部署一次或两次以上,因为不断变化的站点往往会让用户感到不安。

    我们是这样做的,感觉有点脆弱(目前正在使用svn,但考虑切换到git):

    1. 两个“分支”-开发和阶段,阶段的给定版本标记为主干
      • 开发人员为每个更改签出一个TRUNK副本,并为其创建一个分支
      • 开发人员在本地工作,频繁地签入代码(就像投票一样:早期和经常)
      • 当开发人员感到满意时,它不会完全崩溃,将分支与开发人员合并并部署到开发站点。
      • 根据需要重复3-4次,直到更改“完成”
      • 将变更分支与暂存合并,部署到暂存站点。完成预期的最终测试。
      • 经过一段时间后,将给定的修改阶段标记为主干,并将主干推到活动状态
      • 将主干更改合并回DEV以保持同步

    现在,这些步骤中有一些非常复杂,而且在实践中很难做到(TRUNK->DEV总是中断),因此我不得不想象有更好的方法。

    思想?

    4 回复  |  直到 7 年前
        1
  •  2
  •   Tim Ottinger    16 年前

    如果您希望工作不能按时完成,并且您没有足够的测试体来进行持续集成,那么分支是很方便的。我倾向于在编程任务太大而无法预期完成的商店中看到疯狂的分支开发,因此管理层希望等到发布之前确定应该发布哪些功能。如果你正在做这样的工作,那么你可能会考虑使用分布式版本控制,其中每个工作目录都是一个自然分支,你可以得到所有的本地签入和本地历史记录,你可以在不伤害任何人的情况下吃。您甚至可以与主干之外的其他开发人员交叉合并。

    我的偏好是,当我们在一个不稳定的主干中工作时,分支用于发布候选,然后标记为发布,然后成为紧急补丁的流。在这样的系统中,您很少有超过三个分支(最新版本、当前候选版本、不稳定主干)。如果您正在执行TDD,并且在不稳定的主干上有CI,则此方法有效。如果您需要分解所有任务,以便可以根据需要随时交付代码(通常一个任务应该只有一到两天,并且可以在没有构成其功能的所有其他任务的情况下发布)。因此,程序员承担工作,检查主干,完成工作,同步并在任何时候通过所有测试。不稳定的主干始终可以作为发布候选分支使用(如果所有测试都通过),因此发布将成为非事件。

    总的来说,更好的方法是:更少的分支,更短的任务,更短的发布时间,更多的测试。

        2
  •  1
  •   VonC    16 年前

    一个明显的想法是更“重设基础”(更频繁地从“父”环境阶段合并回“子”环境“开发”到开发分支),以最小化主干的最终影响->DEV,这将不再需要了。

    也就是说,任何在阶段中完成的、必须一次性投入生产的(主干)都应该尽早在DEV和privatedevs分支中合并,否则那些后期的改装合并总是一件痛苦的事情。

    但是,如果上面的合并工作流程太不方便的话,我建议在发布(新主干)之后,基于最新的开发版本,创建一个REBASE分支。重基主干->DEV将成为TRUNK->在所有问题都已解决的情况下重新设置基础,然后进行最终合并开发->重新设置基础,以检查任何当前开发人员是否与新更新的系统兼容。最后一次从REBASE到DEV(以及到私有DEV分支)的简单合并将完成该过程。
    分支的要点是隔离不能与其他当前开发工作一起进行的开发工作。如果主干->DEV过于复杂,无法与当前的DEV配合,需要将其隔离。因此出现了“重设基础”分支命题。

        3
  •  1
  •   Andriy Volkov    15 年前
        4
  •  0
  •   antik    16 年前

    对我们来说,所有的发展都发生在一个分支中。我们针对每个bug和每个特性进行分支。理想情况下,该分支只用于一个特性,但有时并不打算这样做。

    当工作完成、测试并“准备好”时,我们将更改合并到主干中。我们的规则是,主干在任何时候都不应该破坏其中的代码。如果断开的代码进入主干,修复它就成了首要任务。

    当所有功能都完成并合并时,将进行发布:发布的分支将作为标记创建。标签允许我们在需要时检索shapshot。分支机构允许我们提供以前版本的支持。修复发布版本中的bug是通过转到该版本的分支,从该分支进行分支来完成的。当一切正常时,更改会合并回发行版的分支,如果需要,会一直合并到主干。