谈谈我眼里的 git flow
一、前言
最近接手的一个内部孵化项目进入了紧张的迭代开发期,一周至少需要完成 5 个功能以及 N 个历史 Bug 修复工作。之前项目只有一个人负责,因此所有的开发都在 git 的 develop 分支里开发,开发完毕后合并到 master 上。
但是现在为了满足敏捷开发、快速迭代的需求,后端项目组增加了 2 名成员,结果发现只在 develop 分支上开发的问题弊端过多,问题出现在:
- 大家的代码经常发生冲突,基本上一天有 5% 的时间要解决冲突问题
- 生产环境上遇到紧急的问题无法正常修复,每次修复都直接在服务器上修改,然后再同步回本地,结果造成大量无效时间。
为了解决此问题,我决定在小组内启用 git flow 开发模式,本文也当做一个简单的组内学习教程,也希望对其他人有用。
二、什么是 Git Flow?
关于什么是 Git Flow 估计在百度上能搜出一大堆,但用我的话来总结就是:
git flow 是利用 git 分支让团队协作能无干扰顺利进行的工作流程
它的主要特点有以下几个方面:
- 让处于半成品状态的功能(feature)不会影响到主分支(master)
- 各个开发人员之间做自己的分支,互不干扰
- 主分支(master)永远处于可编译、可运行的状态
以下是 git flow 流程图(是的,这个图肯定也烂大街了,将就看看)
git flow
主要分支介绍
- master 分支:主分支,产品的功能全部实现后,最终在 master 分支对外发布。
- develop 分支:开发分支,基于 master 分支克隆,产品的编码工作在此分支进行。
- release 分支:测试分支,基于 delevop 分支克隆,产品编码工作完成后,发布到本分支测试,测试过程中发现的小 bug 直接在本分支进行修复,修复完成后合并到 develop 分支。本分支属于临时分支,目的实现后可删除分支。
- bugfix 分支:Bug 修复分支,基于 master 分支或发布的里程碑 Tag 克隆,主要用于修复对外发布的分支,收到客户的 Bug 反馈后,在此分支进行修复,修复完毕后分别合并到 develop 分支和 master 分支。本分支属于临时分支,目的实现后可删除分支。
- feature 分支:功能特征分支,基于 develop 分支克隆,主要用于多人协助开发场景或探索性功能验证场景,功能开发完毕后合并到 develop 分支。feature 分支可创建多个,属于临时分支,目的实现后可删除分支。
三、工具安装
工欲善其事必先利其器,我们可以通过以下命令在操作系统里安装好 git-flow 扩展集,简化我们的操作流程:
Mac 系统运行以下命令安装:
$ brew install git-flow-avh
Linux 系统运行以下命令安装:
$ apt-get install git-flow
Windows 系统运行以下命令安装
$ wget -q -O - --no-check-certificate https://raw.github.com/petervanderdoes/gitflow-avh/develop/contrib/gitflow-installer.sh install stable | bash
更具体的安装步骤可以访问此篇文章了解:git-flow 备忘清单
四、场景使用介绍(跟着我练 10 遍)
下面我将模拟出真实的使用场景,每个场景都需要大家敲入正确的代码:
现在公司的官网系统正在 master 分支上平稳运行着,当前计划在 10 天后上线一个新版本,增加投稿功能。
目前公司安排甲、乙、丙三人负责此项目,大家领取的功能如下:
- 甲负责增加投稿功能的前端代码(contribute-frontend)
- 乙负责投稿功能的后端代码,并需要嵌套前端逻辑(contribute-server)
- 丙负责增加投稿相关的后台管理功能(contribute-admin)
具体情况如下:
- 项目进行到第 1 天,所有人都创建好了各自的开发分支,平稳的开发者;
- 项目进行到第 3 天,领导发现用户的注册登录功能有问题,安排甲去负责修-复;甲在当天正常修复,并通知给领导以及乙和丙,让他们同步代码;
- 项目进行到第 5 天,丙率先完成后台功能;
- 项目进行到第 6 天,甲完成前端功能;
- 项目进行到第 7 天,乙完成后台功能以及前端嵌套;
- 项目进行到第 8 天,丙发布了内测版本;
- 项目进行到第 9 天,甲和乙在内测过程中都发现了开发问题,并及时提交修复;
- 项目进行到第 10 天,正式上线;
题目就是:
根据以上每一天的场景,列出当天任务责任人所需要输入的 git flow 命令。如:
## 项目第 1 天,三个人需要运行以下命令创建自己对应的分支
甲:git flow feature start contribute-frontend
乙:git flow feature start contribute-server
丙:git flow feature start contribute-admin
。。。以下是其他的内容
以上就是常见的使用场景了,在这篇文章里不会给出答案,希望大家都能按照自己理解的方式做做此练习。做完一遍后可以反复多做几遍,让自己的身体形成肌肉记忆,提高工作效率 :)