Git工作流

Git Flow

参考: https://nvie.com/posts/a-successful-git-branching-model/

Git Flow 分为两个长期分支和三个短期分支:

  • 长期分支: master、develop

  • 短期分支: features、release、 hotfix

长期分支会跟随项目的生命周期,自创建时就存在,项目删除才会被删除,短期分支则是为了完成某一特定的功能需求临时创建的。


Git Flow 流程:

  • 项目经理在远程仓库创建了一个新的项目

  • git为其自动创建了一个master分支

  • 紧接着,项目经理通过master分支,构建了一个develop分支,用于开发人员开发

  • 项目经理在devlop上将项目骨架提交

  • 项目经理同时针对产品以及业务人员提出的功能以及需求,确定版本v1.0

  • 通过develop分支构建features分支,比如 features/login, features/orders,或者根据需求编号来 features/20200722111, features/20200722112

  • 开发人员根据自己所需要开发的功能或者需求,拉取对应的features分支,并进行开发,并可以随时将代码提交到对应的features分支上

  • 当功能开发完毕后,程序员手动将features分支的内容合并到develop分支上

  • 这样,develop分支完成了对v1.0新功能的汇总

  • 这时,项目开始计划上线,这时项目经理由develop分支创建一个releasev1.0分支(预发布分支),并将release分支打包到测试环境,用于预发布项目版本1.0,并提供给测试人员进行测试

  • 如果测试人员在测试过程中,发现了一些不影响业务以及流程的小bug,开发人员将会直接在release分支上进行bug修复提交,并打包到测试环境。修复完成后再次合并到develop分支上。

  • 测试完毕后,将会再次将代码发布到灰度环境中测试,

  • 当login功能需要上线时,项目经理会将 features/login 分支合并到develop分支上,此时要保证代码逻辑大体正确,代码逻辑符合业务,测试人员将会在develop分支上进行测试

  • 如果在测试过程中,发现了一些bug,开发人员将会继续在features分支上修改,然后合并到develop分支上

  • 测试人员测试完成后,代码各项完成验证,项目经理将release分支合并到master分支上,并给此次合并增加一个tag1.0

  • 持续集成工具发现master分支上的提交,开始进行自动打包部署

  • 上线完毕,项目经理将临时分支 features、release删除

  • 项目在生产环境上运行,客户反映了紧急的线上问题,从新提交新的features已经来不及,这时,项目经理直接从master分支构建一个hotfix分支,并交予开发人员快速修复,修复完毕后,再将hotfix直接合并到master与develop分支上。打包master分支修复bug。

各个分支说明

  • master分支:用于上线发布版本的分支,也是存储生产代码的分支,由develop分支合并,每次合并都会打一个版本tag。

  • develop分支:开发分支,用于开发人员合并功能代码的分支。

  • feature分支:功能分支,每次有新的功能或者需求需要开发,会首先创建一个feature分支,分支命名为 feature/功能名称,或者 feature/需求编号,开发完成后,通过合并develop进行测试。

  • release分支:预发布分支,在合并master分之前,会合并到预发布分支进行测试,release分支代码常打包于准生产环境。

  • develop开发分支:开发分支,主分支至于用发布,而开发分支用户合并开发代码,视作新功能的集合。

  • release预发布分支:在合并master分之前,会合并到预发布分支进行测试,release分支代码常打包于测试环境。

  • feature功能分支:每次有新的功能或者需求需要开发,会首先创建一个feature分支,分支命名为 feature/功能名称,或者 feature/需求编号,开发完成后,合并到develop分支。

  • hotfix热修复分支:当生产上出现紧急bug需要修复时,使用hotfix/bug编号 命名一个新的修复分支,通过合并develop在测试环境测试,上线则是直接合并到master分支上(所以叫hot)

缺点

  • 流程复杂,操作繁琐

  • 发布版本需要预先确认版本功能,不能对需求随时发布

Github Flow

Github Flow 相比于Git Flow就很简单,长期分支只有一个master分支,当有需求或者bug需要修复的时候,就从master中拉取一个分支(不区分功能分支合补丁分支)。当分支开发完成并且测试完成后,再合并到master分支中,部署完毕,将临时分支删除。

优点

  • 简单易用

  • 适合持续发布的产品

缺点

  • 对程序员的素质要求较高(由分支直接合并到主分支发布)

Gitlab Flow

Gitlab Flow 是 Git Flow 与 Github Flow的结合,他吸取了两者的优点,是gitlab.com推荐的做法。

上游优先(upstream first)

只存在一个主分支master,是其他分支的上游,只有上游分支采纳代码变化,才能应用其他分支。比如按照环境来拆分,开发环境就是master分支,开发环境测试完毕后,如果没有问题,才会合并到准生产分支,准生产分支测试没有问题将会发布到他的下游生产分支。

持续发布

除了master分支外,建立不同的环境分支。比如,"开发环境"的分支是master,"预发环境"的分支是pre-production,"生产环境" 的分支是production。

当有新需求或者bug出现时,先建立一个功能分支,修改完成后,将分支合并到develop分支上。测试通过后,再将其放到准生产分支上测试,如果准生产分支上没有问题,则将生产分支与准生产分支同步。

只有紧急情况,才允许跳过上游,直接合并到下游分支。

版本发布

对于”版本发布”的项目,建议的做法是每一个稳定版本,都要从master分支拉出一个分支,比如2-3-stable、2-4-stable等等。以后,只有修补bug,才允许将代码合并到这些分支,并且此时要更新小版本号。

最后更新于