Gitflow Workflow

678 阅读4分钟

Gitflow工作流程是一个Git工作流程,可帮助持续进行软件开发和实施DevOps实践。 它最初由nvie的Vincent Driessen发行并广受欢迎。 Gitflow工作流定义了围绕项目发行版设计的严格分支模型。 这为管理较大的项目提供了一个强大的框架。Gitflow非常适合具有计划发布周期的项目以及DevOps连续交付的最佳实践。 此工作流程未添加功能分支工作流程所需的任何新概念或命令。 而是将非常具体的角色分配给不同的分支,并定义它们应如何以及何时进行交互。 除了功能分支外,它还使用单独的分支来测试,维护和记录版本。

Git工作流程|  比较工作流程

初始化git仓库

Git flow workflow - Historical Branches

该工作流使用两个分支而不是单个主分支来记录项目的历史记录,master分支存储了正式的发布历史,develop分支充当功能集成的分支,使用版本号标记master分支中的所有提交。master 分支由 develop 分支来初始化。

第一步:克隆远程仓库

git clone <仓库地址> 

第二步:提交并推送初始版本

第一种简单的方法是 让一个开发人员 本地创建一个空分支并将其推送到服务器:

$ git branch develop
$ git push -u origin develop

该分支将包含项目的完整历史记录,而master将包含简化版本。 其他开发人员克隆中央存储库,并为develop创建跟踪分支。

第二种方法是使用 git flow init,在现有存储库上创建 develop 分支 :

$ git flow initInitialized empty Git repository in C:/Users/dell/Desktop/gitflow/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Bugfix branches? [bugfix/]
Release branches? [release/]

Hotfix branches? [hotfix/] Support branches? [support/]
Version tag prefix? []
Hooks and filters directory? [C:/Users/dell/Desktop/gitflow/.git/hooks]
$ git branch* develop master

第三种方法是使用SourceTree,它是 git 一个跨平台的 GUI 工具,注册需要科学上网

feature分支

新需求加入

有一个订单管理的新需求需要开发,首先要创建一个 feature/20200301/order 分支,命名规范:feature/分支创建日期/新特性关键字,问题来了,该分支是基于哪个分支创建? 如果 存在 未测试完毕的需求,就基于 master 创建。 如果 不存在 未测试完毕的需求,就基于 develop 创建。

没有git-flow扩展:

$ git checkout develop
$ git checkout -b feature/branch

使用git-flow扩展:

$ git checkout develop
$ git flow feature start branch
Switched to a new branch 'feature/branch'
Summary of actions:
- A new branch 'feature/branch' was created, based on 'develop'- You are now on branch 'feature/branch'
Now, start committing on your feature. When done, use:

     git flow feature finish feature/branch

普通迭代

有一个订单管理的迭代需求,如果开发工时 < 1 天,直接在 develop 开发,如果开发工时 > 1 天,那就需要创建feature分支,在分支上开发。

完成功能分支

完成该功能的开发工作后,下一步就是将 feature/branch 分支合并到develop分支。

没有git-flow扩展:

$ git checkout develop
$ git merge feature/branch

使用git-flow扩展:

$ git flow feature finish feature/branch

什么时候需考虑使用 feature 分支?

  1. 开发一个独立的新特性(完成时,需合并到 develop 分支)
  2. 技术研究与尝试(若失败,可随时删除 feature 分支)
  3. 提前实现下一个版本需要开发的特性(可不在本次迭代中发布)

推荐使用 feature 分支,但 feature 分支的生命周期不能跨一次迭代

release分支(略)

Git Flow工作流程-发布分支

临近预定的发布日期,就可以从develop分支创建一个release分支,创建此分支将开始下一个发行周期,因此此刻之后不能添加任何新功能-该分支中仅应包含错误修复,文档生成以及其他面向发行版的任务。 一旦准备好发布,release分支将合并到master并用版本号标记。 发布开始后,重新合并到develop分支

准备发布新版本

  1. 确认 develop 分支上的功能是否开发完毕

  2. 若开发完毕,则创建 release 分支(发布分支),命名规则:release/分支创建日期/待发布版本号,例如:release/20190919/v1.0.0

没有git-flow扩展:

$ git checkout develop
$ git checkout -b release/20190919/v1.0.0

使用git-flow扩展:

$ git flow release start 20190919/v1.0.0
Switched to a new branch 'release/20190919/v1.0.0'

准备发布该版本后,它将被合并到master分支和develop分支中,然后将该release分支删除,只允许在 release 分支上修复 Bug,不允许提交任何新特性,开发主管需全程监管。

没有git-flow扩展:

$ git checkout master
$ git merge release/20190919/v1.0.0

使用git-flow扩展:

$ git flow release finish '20190919/v1.0.0'

hotfix分支

Git流工作流程-修补程序分支

hotfix分支用于快速修补生产版本,基于master分支而不是 develop分支,此分支是唯一直接从master分支的分支。修复程序完成后,应将其合并到master和develop中,并应使用更新的版本号标记master。

没有git-flow扩展:

$ git checkout master
$ git checkout -b hotfix/branch

使用git-flow扩展:

$ git flow hotfix start hotfix/branch

hotfix分支完成后与feature分支类似也合并到master和development中。

没有git-flow扩展:

$ git checkout master
$ git merge hotfix/branch
$ git checkout develop
$ git merge hotfix/branch
$ git branch -D hotfix/branch

有git-flow扩展:

$ git flow hotfix finish hotfix/branch

Gitflow的总体流程为:

  • 从master分支创建develop分支
  • 从develop分支创建release分支
  • 从develop分支创建feature分支
  • feature完成后,将其合并到develop中
  • 如果检测到develop中的问题
  1. 如果修复工时 < 2h,直接在 develop 修复,如果修复工时 > 2h,需要在分支上修复。

    修复后的提测上线流程 与 新需求加入的流程一致。

  • 完成release后,它将合并到develop和master中
  1. 添加发布日志(RELEASE.md)
  2. 在 master 分支上创建标签,命名规则:tag/日期/版本,例如:tag/20190919/v1.0.0
  3. 删除 release 分支
  4. 打包并上传
  • 在 release 测试出现了 Bug,首先要回归下 develop 分支是否同样存在这个问题。如果存在,修复流程 与 修复测试环境 Bug 流程一致。如果不存在,这种可能性比较少,大部分是数据兼容问题,环境配置问题等。

  • 如果检测到master中的问题,则会从master中创建一个hotfix

  1. 首先要回归下 release 和 develop 分支是否同样存在这个问题。如果存在,修复流程 与 修复测试环境 Bug 流程一致。如果不存在,这种可能性也比较少,大部分是数据兼容问题,环境配置问题等。

  2. 从 master 分支某个 tag 上创建一个 hotfix 分支(热修复分支),命名规则:hotfix/分支创建日期/待 发布版本号,例如:hotfix/20190919/v1.0.1

  3. 开发人员 Bug 修复

  4. 对 hotfix 分支进行测试

  5. 验证 Bug 是否已修复

  • hotfix完成后,它会合并到develop和master中
  1. 添加发布日志(RELEASE.md)
  2. 在 master 分支上创建标签
  3. 删除 hotfix 分支
  4. 打包并上传

Commit 提交规范

juejin.cn/post/693429…

相关链接

juejin.cn/post/684490…

www.atlassian.com/git/tutoria…

juejin.cn/post/684490…

datasift.github.io/gitflow/Int…

nvie.com/posts/a-suc…

juejin.cn/post/684490…