【发布时间】:2013-06-30 10:28:50
【问题描述】:
由于特定情况,我正在考虑为我当前的工作场所扩展 git-flow 模型。但是我的情况是如此普遍,以至于我很惊讶以前没有人用 git-flow 模型做过这件事,这让我觉得我错过了一个明显的问题。我的问题是:我提议的扩展是否有缺陷?
场景:我有多个开发团队从一个共同的代码库开发,我们通过几个(永久)环境发布版本:首先是系统集成环境 (SIT),然后是 UAT 环境,然后是预生产,最后生产。这是严格顺序的,尽管任何候选版本都可能在任何环境中失败,因此不会再进一步。因此,以后的每个环境都只是先前环境的一个较慢的版本。
我们正在引入 git 进行源代码控制,我们需要一个工作流,而 git-flow 看起来是一个好的开始。
我们问自己如何随时捕捉(即如何知道)每个环境中的内容。 git-flow 模型似乎本质上有两个核心状态:master 和develop。他们有一个“无限的寿命”。其他分支只是"supporting branches",具有“有限的生命时间”。它们的存在只是为了允许开发和从开发到生产(通过临时发布状态)。 git-flow 模型基于从开发到发布。
但是,这并没有从逻辑上映射到我们的场景,它具有多阶段的发布顺序。当然,我对develop 分支很好。 master 分支显然映射到我们的生产环境。 original git-flow description 这么说 master:
因此,每次将更改合并回 master 时,这是一个新的 生产版本根据定义。我们往往对此非常严格,因此 理论上,我们可以使用 Git 钩子脚本来自动构建和推出 每次在 master 上提交时,我们的软件都会发送到我们的生产服务器。
由于master 是生产的连续记录,我们应该扩展 git-flow 模型 为 SIT、UAT 和 pre-prod 拥有相应的分支似乎是一致的。毕竟,它们是永久环境,具有严格的发布程序。它们只是比生产快一点。
这些额外的永久分支位于develop 和master 之间,就像它们对应的环境一样。
这意味着现在可以轻松跟踪每个环境的版本以及每个环境的状态。每个分支的合并也更容易:SIT 分支需要来自 develop 的合并,UAT 分支需要来自 SIT 分支的合并,pre-prod 分支需要来自 UAT 分支的合并,最后是 master分支(用于生产)需要从 pre-prod 分支合并。后面的每个分支都只是前一个分支的移动速度较慢的版本。
我错过了什么吗?
【问题讨论】:
-
您可以通过只对其他分支进行快进合并来实现相同的目标。现在它们只是指向
develop过去状态的指针,而您实际上并没有真正改变 git-flow 模型:)。 -
我想知道你是否能够实施这种分支策略。我有完全相同的要求。我有以下环境:DEV - INT - QA - PROD。我想完全按照你的做法去做。我想为每个具有无限寿命的环境建立一个分支。你能分享你实施这种分支策略的经验吗?根据您的经验,您认为这值得吗?
-
其实我们最后并没有实现。我们根本没有选择任何分支(嗯,除了 master 和偶尔的分支来修复以前版本中的错误)。每个推送的更改都重新基于 master 的末尾。这要简单得多,因为团队是 git 新手。它迫使个人开发人员经常推动小的连贯变化。此外,只有一条直线意味着支持团队更容易追踪历史,这与开发团队是分开的。如果可以选择,我会再次这样做。
标签: git deployment release-management git-flow