git 工作流程
概述
git 作为一种源码管理系统,不可避免地涉及到多人协作。为提升项目开发效率,若干种规范化的工作流程 (workflow) 被提出。
本文之中,我们介绍三种常见的工作流程:Git Flow、Github Flow、Gitlab Flow。
Git Flow
Git Flow 之中,master 分支和 develop 分支为两个长期分支;其余分支均为短期分支,相关功能开发完成后,其将被合并至长期分支。
master 分支
用于存放对外发布的稳定版本。它只能通过合并其他分支而得到。
develop 分支
用于存放项目开发的最新版本。当向项目中添加新功能时,就会新建 feature 分支,随后在此分支中开发功能。功能开发及测试完成后,此分支就会被合并至 develop 分支。
feature 分支
用于开发某个功能点。
release 分支
当管理人员认为 develop 分支所代表的项目功能已经开发完成,此分支就会被合并至 release 分支。测试人员在此分支上进行最终测试,如果通过测试则合并至 master 分支。
hotfix 分支
当稳定版本发现 Bug,管理人员便会生成 hotfix 分支以紧急修复,随后将其合并至 master 分支和 develop 分支。
Git Flow 具有如下优缺点:
优点
分支清晰、可控。
缺点
分支众多,比较复杂。
对于 Git Flow 而言,长期分支 develop 用于开发,涉及频繁操作;长期分支 master 用于发布,不定期产生稳定版本。鉴于两者的使用频率不同,该种工作流程适用于“版本发布”类型的项目 (不定期上线新版本)。
Github Flow
鉴于 Git Flow 过于麻烦,Github Flow 被提出。它是一个简化版的 Git Flow,其中仅有一个长期分支—— master 分支。
Github Flow 的使用流程如下:
- 根据需求,从 master 拉取新分支。
- 新分支功能开发完成后,向 master 发起
pull merge
请求。 - master 负责人测试新分支功能,如果没有问题,可合并其至 master。
对于 Github Flow 而言,长期分支 master 不仅用作开发,也用作发布,即 master 分支的开发与发布是同步的。鉴于此,该种工作流程适用于“持续发布”类型的项目。
可以看到,这种工作流程十分适用于开源项目,但是极大概率不适用于公司项目 (毕竟开发和发布之间往往存在间隔)。
Gitlab Flow
Gitlab Flow 综合了 Git Flow 和 Github Flow 两者的优点,从而使得其可同时适用于“版本发布”类型和“持续发布”类型的项目开发。
Gitlab Flow 的最主要原则为 **上游优先 (upstream first)**,即 master 分支为所有其他分支的上游分支,当下游分支出现 Bug 时,其会开启分支进行修复,随后将此分支合并至 master 分支,master 分支再往出现 Bug 的分支合并其内容。
持续发布
对于“持续发布”类型的项目而言,Gitlab Flow 建议:除 master 分支外,建立其他环境分支。例如,master 分支用于开发环境、pre-production 分支用于预发环境,production 分支用于生产环境;且master 分支为 pre-production 分支的“上游分支”,pre-production 分支为 production 的“上游分支”。
版本发布
对于“版本发布”类型的项目而言,Gitlab Flow 建议:每发布一个稳定版本,就从 master 分支中拉取一个分支。