:::info
本文内容基于我自己的理解和一些文章,是学习笔记,但同时我也希望它能被作为一个学习参考资料。
所以如果有错误请及时评论或者联系我,希望能为大家提供一个比较好的学习参考!
因为我自己的开发经历有限,所以并不能保证自己的理解是合适且正确的,所以希望大家狠狠地 educate 我!
:::
:::tips
本条目主要介绍有关 Git Workflow 的概念性质和指导性质的一些内容,它们并不具体,但是会指导您的使用。
:::
何为 ‘Git Workflow’
Git Workflow 是一种规范的工作流程,而并不是一个具体的工具或者技术,当然貌似有一个叫做 Gitflow 的工具,但在本文中暂时不介绍。
现在被广泛使用的 Workflow 主要有三种:
- Git Workflow
- Github Workflow
- Gitlab Workflow
他们的关系是,依次吸收与改进,各有特点,且与对应的使用平台相适应,下面将分条概述。
在不同的 Workflow 中,最主要的区别就是不同分支间的合作形式和组织形式,如果你对 Git 的分支还不是很熟悉,请先参考 [2.x] 的部分内容,简单了解一下基础指令。
Git Workflow
Tips: 在阅读接下来的一些说明时,可以联系上方这张图进行理解。
在 Git Workflow 中,主要有 5 类分支,他们分别是masterhotfixreleasedevelopfeature,它们有着不同的作用和使用规范。其中masterdevelop是长期分支,他们会随着项目的维护一直存在,而hotfixreleasefeature这些短期分支则会在完成对应开发后被合并或者删除。
Master 分支(主分支)
直接面向使用方的分支,在master中存放的应当是可以使用的稳定版本,因而通常也会在其中添加版本编号。
我们希望master中的代码总是从别的分支中合并过来的,而并不希望任何人直接 commit 到master中。
Develop 分支(开发分支)
所有开发工作都基于该分支进行,可以理解为项目代码的汇流处,而master则是develop中特定节点可用发行。
当需要添加新的功能时,我们需要新建一个feature(如图),然后在完成对应开发后合并回develop。
Hotfix 分支(补丁分支)
当master中出现问题,我们需要以出问题的节点为基础创建一个hotfix,然后在这个hotfix中进行 bug 的修复工作。
在完成修复后,我们需要把这个hotfix同时合并到master和develop(如图),一方面确保下一个稳定版本可用,一方面确保未来的版本也修复了该 bug。
Release 分支(预发分支)
当develop足够成熟时,我们会希望它被合并到master中作为一个稳定版本发布,但在这之前,我们需要在release中进行最后的测试和修正。
在完成这些工作后,我们需要把release同时合并到master和develop(如图),一方面确保下一个稳定版本可用,一方面确保未来的版本也修复了这些问题。
hotfix和release是类似的,他们一个是基于master对两个长期分支进行维护,一个是基于develop。
Feature 分支(功能分支)
当我们需要开发新的功能,或者说对于大部分开发工作,在合理的模块划分后,就需要创建合适的feature分支来进行对应的开发工作。因为feature往往比较多,所以要求各个feature之间耦合程度不宜过高,以减少冲突,这就需要进行合理的划分。
Github Workflow
- 这里的 Workflow 与 Github Action 中的 Workflow 有区别!
Github Workflow 对 Git Workflow 进行了简化,在 Github Workflow 下仅仅区分master和branch,而具体功能由各个branch的命名来体现,即要求branch的命名具有叙事性。
最重要的是,没有了develop分支以后,长期维护的就只有master了,这就意味着发布的代码一般都是进度最新的代码。而这件事是有好有坏的。
基于 Github Workflow 的工作流程主要如下:
- 创建分支 (create a branch or fork);
- 在分支中进行开发并完成提交(add commits);
- 发送 Pull Request (open a pull request);
- 人工审核代码、沟通交流,以及必要的测试 (discuss and review);
- 合并进master (merge)
Gitlab Workflow
参考资料 | Ref
- https://nvie.com/posts/a-successful-git-branching-model/
- https://www.ruanyifeng.com/blog/2015/12/git-workflow.html
- https://gitbook.tw/chapters/gitflow/why-need-git-flow
- https://medium.com/i-think-so-i-live/git上的三種工作流程-10f4f915167e
- https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md
- https://about.gitlab.com/topics/version-control/what-is-git-workflow/