当我们选择 Git 作为版本控制系统时,使用一个统一的工作流程是非常重要的。 Git 在分支控制上面做得非常好,但是如果团队在开发中没有使用有效的工作流程,混乱将是不可避免的。
Gitflow 是一个Git工作流程设计, 由 Vincent Driessen 提出 ,并受到广泛欢迎。
Gitflow 工作流定义了围绕项目版本设计的严格分支模型。这为管理大型项目提供了一个强大的框架。
类似的工作流程方式还有 Gitlab Flow 、 Github Flow 。
什么是 git-flow
安装 git-flow
,会为我们的 Git
提供一些扩展命令。如 git flow feature
、git flow release ..
…
这些命令的作用是把标准的git
命令组合成脚本,按照预设的顺序自动执行多个操作。从而完成我们的工作流程。
这里推荐安装使用 gitflow-avh 。
理解 git-flow
使用 Git Flow
项目存在两个长期分支。
- 主分支
master
- 开发分支
develop
master
用于存放对外发布的版本,任何时候在这个分支拿到的,都是最稳定的发布版本。
develop
则用于日常开发,存放最新的开发版本。
其次,项目慧三种临时分支
- 功能分支
feature branches
- 补丁分支
hotfox branches
- 发布分支
release branches
一旦相应的分支开发完成,它们会被合并到 master
和 master
中,然后被删除掉。
功能开发
$ git flow feature start main-page
Switched to a new branch 'feature/main-page'
Summary of actions:
- A new branch 'feature/main-page' was created, based on 'develop'
- You are now on branch 'feature/main-page'
当我们使用命令 git flow feature start main-page
,git-flow
会基于 develop
创建一个新的分支 feature/main-page
,并且切换到这个分支 。
经过开发,我们完成了这个功能,这里需要提交完成:
$ git flow feature finish main-page
Switched to branch 'develop'
Updating 9aa127f..f8eaf5c
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
Deleted branch feature/main-page (was f8eaf5c).
可以看到,这里主要做的是:
- 合并 main-page 分支到 develop
- 将 main-page 分支删除
发布管理
当我们的 develop
分支代码可以发布时,它必须满足:
- 包括所有新的功能和必要的修复;
- 已经被彻底的测试过了。
$ git flow release start 1.1.1
Switched to a new branch 'release/1.1.1'
Summary of actions:
- A new branch 'release/1.1.1' was created, based on 'develop'
- You are now on branch 'release/1.1.1'
注意, 请使用版本号命名 release 分支,这样可以更好得标记 release 提交。
git flow release finish 1.1.1
- 首先,git-flow 会拉取远程仓库,以确保目前是最新的版本。
- 然后,release 的内容会被合并到 master 和 develop 两个分支中去,这样不仅产品代码为最新的版本,而且新的功能分支也将基于最新代码。
- 为便于识别和做历史参考,release 提交会被标记上这个 release 的名字
- 清理操作,版本分支会被删除,并且回到 “develop”。
Hotfix
创建 Hotfixes:
$ git flow hotfix start missing-title
这个命令会创建一个名为 hotfix/missing-title
的分支,因为这是对产品代码进行修复,所以这个 hotfix 分支是基于 master
的。
这里要和 release 分支区分开来,release 分支都是基于 develop
分支的。
因为你不应该在一个还不完全稳定的开发分支上对产品代码进行地修复。
完成 Hotfixes:
$ git flow hotfix finish missing-title
- 完成的改动会被合并到
master
中,同样也会合并到develop
分支中,这样就可以确保这个错误不会再次出现在下一个 release 中。 - 这个 hotfix 程序将被标记起来以便于参考。
- 这个 hotfix 分支将被删除,然后切换到
develop
分支上去。
总结
git-flow
向我们展示了如何通过一个固定的工作流程使得团队的协作更加简单容易。它不是必须的,但是它展现的工作方式对于我们理解工作流程是很有帮助的。
当然,正确地理解工作流程的基本组成部分和目标,我们完全可以定义一个属于自己的工作流程。