Gitflow工作流程是一个Git工作流程,可帮助持续进行软件开发和实施DevOps实践。 它最初由nvie的Vincent Driessen发行并广受欢迎。 Gitflow工作流定义了围绕项目发行版设计的严格分支模型。 这为管理较大的项目提供了一个强大的框架。Gitflow非常适合具有计划发布周期的项目以及DevOps连续交付的最佳实践。 此工作流程未添加功能分支工作流程所需的任何新概念或命令。 而是将非常具体的角色分配给不同的分支,并定义它们应如何以及何时进行交互。 除了功能分支外,它还使用单独的分支来测试,维护和记录版本。
初始化git仓库
该工作流使用两个分支而不是单个主分支来记录项目的历史记录,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 分支?
- 开发一个独立的新特性(完成时,需合并到 develop 分支)
- 技术研究与尝试(若失败,可随时删除 feature 分支)
- 提前实现下一个版本需要开发的特性(可不在本次迭代中发布)
推荐使用 feature 分支,但 feature 分支的生命周期不能跨一次迭代
release分支(略)
临近预定的发布日期,就可以从develop分支创建一个release分支,创建此分支将开始下一个发行周期,因此此刻之后不能添加任何新功能-该分支中仅应包含错误修复,文档生成以及其他面向发行版的任务。 一旦准备好发布,release分支将合并到master并用版本号标记。 发布开始后,重新合并到develop分支
准备发布新版本
-
确认 develop 分支上的功能是否开发完毕
-
若开发完毕,则创建 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分支
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中的问题
-
如果修复工时 < 2h,直接在 develop 修复,如果修复工时 > 2h,需要在分支上修复。
修复后的提测上线流程 与 新需求加入的流程一致。
- 完成release后,它将合并到develop和master中
- 添加发布日志(RELEASE.md)
- 在 master 分支上创建标签,命名规则:tag/日期/版本,例如:tag/20190919/v1.0.0
- 删除 release 分支
- 打包并上传
-
在 release 测试出现了 Bug,首先要回归下 develop 分支是否同样存在这个问题。如果存在,修复流程 与 修复测试环境 Bug 流程一致。如果不存在,这种可能性比较少,大部分是数据兼容问题,环境配置问题等。
-
如果检测到master中的问题,则会从master中创建一个hotfix
-
首先要回归下 release 和 develop 分支是否同样存在这个问题。如果存在,修复流程 与 修复测试环境 Bug 流程一致。如果不存在,这种可能性也比较少,大部分是数据兼容问题,环境配置问题等。
-
从 master 分支某个 tag 上创建一个 hotfix 分支(热修复分支),命名规则:hotfix/分支创建日期/待 发布版本号,例如:hotfix/20190919/v1.0.1
-
开发人员 Bug 修复
-
对 hotfix 分支进行测试
-
验证 Bug 是否已修复
- hotfix完成后,它会合并到develop和master中
- 添加发布日志(RELEASE.md)
- 在 master 分支上创建标签
- 删除 hotfix 分支
- 打包并上传
Commit 提交规范
相关链接
www.atlassian.com/git/tutoria…