gitflow 使用规范
Gitflow使用规范
一. 简介
GitFlow
是构建在 Git
上的一个组织软件开发活动的模型, 是在 Git
上构建的一项软件开发最佳实践
2010年Vincent Driessen提出了A Successful Git Branching Model分支模型,用来帮助开发人员在大型软件项目中追踪feature,hotfix和release。Gitflow
使整个分支模型自动化完成,更加易用。
To conclude, always remember that panaceas don't exist. Consider your own context. Don't be hating. Decide for yourself.
引用Vincent的反思笔记:永远记住不存在灵丹妙药,考虑你的实际情况。不要讨厌它,请自行决定。
二. 分支模型中各分支概念
分支说明
- 主分支: master 与 develop 分支为主分支, 是受保护分支, 只有
master
权限才可以操作, 只接受代码合并, 不接受代码提交 - 辅助分支:
feature
功能分支,bugfix
功能修复分支,release
发布分支,hotfix
热修复分支均为辅助分支, 完成相应的功能后, 与主分支合并, 并删除当前辅助分支
主分支说明
gitflow 定义了两个主分支, 是长期支持分支, 不会被删除. 主分支只接受代码合并, 不接受代码提交
-
master
分支We consider origin/master to be the main branch where the source code of HEAD always reflects a production-ready state.
master分支上的代码始终指向生产就绪状态, 即生产环境上实际使用的代码.
master分支规定:
- 和生产端的代码保持一致
- 仅在上线前才更新master分支上的代码
- 每次更新mater, 都需要对其添加
tag
, 用于发布 或 回滚 - master分支为保护分支, 不可以直接进行push操作
- master只可以被 release/ hotfix分支合并, 拒绝其他分支的合并请求
综上: master分支上的代码, 可以随时部署到生产环境使用
-
develop
分支We consider origin/develop to be the main branch where the source code of HEAD always reflects a state with the latest delivered development changes for the next release. Some would call this the “integration branch”. This is where any automatic nightly builds are built from.
develop分支为下一个发布的最新交付代码, 叫做'集成分支', 即 develop分支为主要开发分支, 下个版本的发布应该基于develop分支, 为所以功能的集成分支
develop分支规定:
- develop 不能与 master 分支直接交互
文章到目前为止, 我们会产生以下疑问:
- develop是开发分支, 但是又不能提交代码, 那么后续应该如何开发?
- master 分支是生产分支, develop分支开发完成后, 无法直接交互, 那么生产环境如何更新?
- 如果代码不能合并, 功能不能及时上线, 那么后续的开发该怎么进行?
- 生产环境如果产生了bug, 又该如何进行修复?
这时候就引出了我们的辅助分支
辅助分支
辅助分支, 是为了辅助团队进行并行开发, 功能追踪, 线上快速修复, 与主分支不同, 这些辅助分支不是长期分支, 功能开发完成后, 就回删除该分支.
这些分支每个都有特定的目的, 必须遵循关于分支的起始分支以及合并目标分支的规则.
辅助分支有:
- feature 功能分支
- bugfix 缺陷修复分支(在原文[1]中并未提及,但是avh版本git-flow包含此分支)
- release 发布分支
- hotfix 热修复分支
- support 长期支持分支
-
feature分支
【强制】出自:develop分支
【强制】合并回:develop分支
【强制】命名规范:/feature/[英文功能名称]
本质: 只要功能处于开发状态, 他就会存在, 最终会合并会develop分支或者被丢弃
feature分支规定:
- 以功能为单位从develop拉一个feature分支
- 每个feature的分支颗粒要小, 利于快速迭代, 避免冲突
- 本地测试以及review通过后, 在gitlab发起合并到develop分支的申请
- 合并前, 先拉取develop分支最新的代码, 然后把最新的develop分支代码合并到本地的功能分支, 然后发起合并申请
- feature只与develop分支发生交互, 不与master发生交互
他解决了第一个疑问, 不在develop分支开发功能, 而是在feature分支开发
-
release分支
【强制】出自:develop分支
【强制】合并回:develop和master分支
【强制】命名规范:/release/[发布版本号]
发布分支为下一个生产版本,只允许小错误的修复和准备发布的元数据(版本号,发布日志,日期等)的修改。最终发布版本号,在发布分支决定。
发布分支我们规定:
- 生成release分支,首先修改版本号,以区别develop分支的版本
- 只存在一个发布分支(需要多版本同时维护时, 可以定义多个发部分支)
- 当需要为发布新版做准备时,从develop衍生出一个release分支
- release分支也可以从develop分支上指定commit派生出
- release分支测试通过后,合并到master分支并且给master标记一个版本号
- release分支一旦建立就将独立,不再从其他分支合并代码
- 必须合并回develop分支和master分支或废弃
发布分支解决了我们的第二第三个疑问, master分支通过release分支和develop分支进行交互, 使用release分支, 即可以进行发布前的独立校验, 又可以不影响develop分支的后续开发活动
-
bugfix 分支
【强制】出自:develop分支
【强制】合并回:develop分支
【强制】命名规范:/bugfix/[bug-英文缺陷名称或者bug编号]
用于修复develop分支中出现的bug
-
hotfix 分支
【强制】出自:master分支
【强制】合并回:master分支 和 [develop分支 release分支]
【强制】命名规范:/hotfix/[发布版本号]
热修复分支, 用于修复生产环境出现的bug.
当线上版本出现了不得不立即修复的缺陷时,可以从master分支新建热修复分支。修复完成之后,更改版本号,合并回master分支以及develop分支。
注意,当在热修复之前已经发布了下一个发布版本的时候,此时热修复分支应该合并回master和release分支,release分支完成之后,会把热修复的分支合并回develop分支。
hotfix分支规定:
- hotfix分只用来快速给已发布产品修复bug或微调功能
- 只能从master分支指定tag版本衍生出来
- 一旦完成修复bug,必须合并回master分支和develop分支
- master被合并后,应该被标记一个新的版本号
- hotfix分支一旦建立就将独立,不可再从其他分支pull代码
热修复分支解决了我们上文中提到的最后一个问题, 生产环境中的bug由hotfix分支修复
以下图片为整个gitflow的模型图[2]
http://nvie.com/posts/a-successful-git-branching-model/ A Successful Git Branching Model ↩︎