情景是这样的:我有许多开发团队从一个共同的代码库进行开发,并通过几个(永久的)环境推出发布:首先是系统集成环境(SIT),然后是用户验收测试环境(UAT),然后是预生产环境,最后是生产环境。这是严格按顺序进行的,尽管任何发布候选版本都可能在任何环境中失败,因此无法进一步推进。因此,每个后续环境只是前一个环境的移动速度较慢的版本。
我们正在引入git进行源代码控制,我们需要一个工作流程,而git-flow看起来是一个不错的开始。
We asked ourselves how to capture (i.e. how to know) what's in each environment at any time. The git-flow model seems to have essentially two core states:
main
and develop
. They have an "infinite lifespan". Other branches are just "supporting branches" with a "limited life time". They exist only to allow development and to go from development to production (via a temporary release state). The git-flow model is based around going from development to release.However, this doesn't map logically onto our scenario, with its multi-stage release sequence. I'm fine with the
develop
branch, of course. And the main
branch clearly does map to our production environment. The original git-flow description says this about main
:每次更改合并回主分支时,根据定义,这是一个新的生产发布。我们倾向于非常严格地执行此操作,以便在理论上,我们可以使用Git钩子脚本在每次对主分支进行提交时自动构建和部署软件到我们的生产服务器。
由于“main”是生产的连续记录,似乎一致的做法是应该为SIT、UAT和预生产设置相应的分支以扩展git-flow模型。毕竟,它们是永久环境,具有严格的发布流程。它们只是比生产环境变化得快一点而已。
这些额外的永久分支位于“develop”和“main”之间,就像它们相应的环境一样。
这意味着现在很容易追踪每个环境的版本发布和状态。对于每个环境的合并也更加容易了:SIT分支需要从
develop
进行合并,UAT分支需要从SIT分支进行合并,pre-prod分支需要从UAT分支进行合并,最后main
分支(用于生产)需要从pre-prod分支进行合并。每个后续分支只是前一个分支的速度较慢的版本。我有遗漏什么吗?
develop
过去状态的指针,实际上你并没有真正改变git-flow模型 :)。 - Chronial