制定一套适合自己团队的GITflow标准化工作流
Git作为分布式代码管理的“当红炸子鸡”,被越来越多团队使用。当团队多个人员在同一个Git仓库上进行代码开发,没有一套标准化流程,将会引起代码管理的混乱,上线流程的迷茫,影响工作效率。制定一套适合自己团队的Gitflow标准化工作流势在必行!
写在前面的话
Git,作为分布式代码管理软件中的“当红炸子鸡”,被越来越多的开发人员在使用,也被越来越多的开发人员在赞美,是因为它杰出的“分布式”特性,大大方便了团队人员间互相合作。我们火锅管理系统最近也采用Git作为我们代码的管理软件。看着大家每天在Git仓库上建分支,拉代码,合代码,干得不亦乐乎,甚是感染。但是,分支一多,参与人员对Git的掌握程度不一致,难免会出现分支代码管理混乱,上线流程不清晰,从而影响开发效率。正所谓,有规则圆,有矩则方,没有规矩难成方圆。这就是为啥我们需要把Git工作流进行标准化处理,统一的拉分支规则,统一的上线流程,让整个团队所有人员按照统一的标准来干活,从而提高我们代码管理及其上线的效率。
目前的GIT Flow工作流
对Git工作流进行标准化处理咋们可并不是第一家。目前已经有很多人对Git工作流的标准化进行过处理。大概有以下几种:功能开发工作流,Gitflow工作流,Forking工作流,GitHub工作流等。下面我们主要介绍Gitflow工作流。
Git Flow工作流
Gitflow工作流是目前非常流行的一种比较成熟的工作流。该工作流的具体实例图形如下图所示。
如上图所示,我们可以看到,Gitflow工作流把整个代码分支分成了以下几种:Master分支,Hotfix分支,Release分支,Develop分支,Feature分支。各个分支的作用及其交互为:
Feature分支:我们每当要迭代一个新功能,就需要来创建一个feature分支。该功能的所有代码都在该feature分支上维护。feature分支代码从Develop分支上拉取;并且,代码也会push回Develop分支;
Develop分支:是我们的开发分支。所有的开发人员在一个迭代周期中,都是从develop分支去拉取代码,然后功能开发完成,就check in回develop分支。当某个迭代周期完成,我们需要从develop分支上把可以发布上线的功能拉取到Release分支进行上线;
Release分支:当一个迭代周期完成,我们需要从develop分支拉取可以上线的功能到release分支。一旦release分支拉取功能确定,在上线之前,任何人都不可以再往release分支上提交代码。在release分支上进行提测,上线后,合并到master分支;
Master分支:对应上线功能的代码版本,它是最稳定的代码分支。
HotFix分支:如果线上系统出现了bug,我们需要从master分支拉取一个新分支,也就是hotfix分支,在该分支上解决bug,并且校验bug,然后从该分支上线;
腾讯很多的团队都在采用Gitflow工作流。我们团队也想直接采用Gitflow工作流严格执行,但是我们团队有我们团队的特点,比如,我们没有一个固定的迭代周期,每个功能是直接分配给某一个人来单独开发,单独估计开发时间,单独上线,并且迭代周期很短;前端和后台的代码不在同一个Git仓库中来管理,是分开管理的。以上原因,导致如果我们严格采用Gitflow工作流,有些分支并不需要,有些冗余。针对以上情况,经过小组讨论,我们把gitflow工作流根据自己组的特定情况,更改为如下流程:具体如下图所示:
由于我们没有整体迭代周期的概率,每个功能都是分配给每个具体的人员,由每个具体的人员来分别估计工作时间,并单独开发,然后单独上线,所以,我们去掉了develop分支和release分支,但是增加了merge request过程来做代码review。具体流程如下:
1)开发人员接到一个新功能需求开发,从master上拉取一个新功能分支,命名规则为:feature-XXX,其中,XXX为功能模块的名字,尽量通俗易懂;
2)在本地Git仓库也创建一个feature-XXX分支,对应远程的feature-XXX分支。开发人员就在本地的feature-XXX分支上进行功能的开发;
3)当功能开发完成,需要进行提测,提测之前,跟master分支进行一次代码合并,然后Push代码到远程的feature-XXX分支,在该分支上进行提测,上测试机,并进行问题的修复;
4)当测试完成,进行预发布测试,从feature-XXX分支拉代码部署到预发布机,在线上环境进行校验,并进行问题的修复;
5)预发布测试完成,开始提交merge request,做code review。然后,将代码从feature-XXX合并到master分支。
6)从master分支将代码部署到灰度机器进行灰度,灰度完成没有问题,直接全量;发现问题,回退代码,到步骤5)重新进行;
7)如果发现线上系统有bug,需要从master分支直接拉取一个bug fixing分支,在该分支上做bug fixing。bug fixing分支的命名规则:bugfixing-XXX-YYY,其中,XXX为功能名称,YYY为分支创建日期。例如:bugfixing-imageurl-0821。所有问题,都在bug fixing分支上修改,并且提测,预发布。当问题解决,准备上线,同理,提交一个merge request,做code review。然后合并代码回Master。在master分支上灰度,并全量上线;
8)功能全量上线后,对应的分支即可删除。
9)尽量不要重复用同一个分支来进行多个不同功能的开发,这样很容易让人引起误解。
写在后面的话
没有放之四海而皆准的真理,也没有完美无瑕的流程,只有适合自己团队的流程,才是合理的好流程。在上面流程中,我们没有固定的迭代周期,故而我们去掉了develop分支和release分支。但是,一旦我们的开发流程发生了改变,工作模式发生了变化,那么我们的Gitflow工作流也会随之进行调整。
制定一套适合自己团队的GITflow标准化工作流的更多相关文章
- Yeoman:适合现代Web应用的现代工作流
Yeoman:适合现代Web应用的现代工作流 Yeoman是Google的团队和外部贡献者团队合作开发的,他的目标是通过Grunt(一个用于开发任务自动化的命令行工具)和Bower(一个HTML. ...
- 一套轻量级销售团队管理系统【CRM】
项目描述 Hi,大家好,又到了源码分享时间啦,今天我们分享的源码一个<轻量级销售团队管理系统>,这套系统是一套轻量级的CRM系统,基于SSM的SpringBoot架构.这套项目用到很多潮流 ...
- 大学四年,总结一套适合小白的Java自学路线和方法
前言篇 大家好,我是bigsai 好久不见,甚是想念,文章同时收录在回车课堂(文底阅读原文可达). 无论你是大学生还是在职人员,想学Java时,都会面临两个选择,自学或者报班.报班通常太费钱,时间又不 ...
- php基础知识(很简单一套适合零基础的朋友学习)
红色的一般都是重点,还有自己的一些废话 运算符 算术运算符: 基本运算(除数不能为0) 比较运算符: 大小比较(类型比较), 如果两个类型不一样,系统会自动转换成统一类型 赋值运算符: 基本赋值和运算 ...
- 一个非常适合IT团队的在线API文档、技术文档工具 (ShowDoc)
在逸橙呆了不到两年,开发时后端都有开发接口API,来到数库,好多后端开发和前端沟通是还是发doc文档,很不方便,我向cto反应,自己找到这个,老乡田雷(php,隔壁村的)也用过,可能某些原因选择其他的 ...
- 前端小微团队的Gitlab实践
疫情期间我感觉整个人懒散了不少,慢慢有意识要振作起来了,恢复到正常的节奏.最近团队代码库从Gerrit迁移到了Gitlab,为了让前端团队日常开发工作有条不紊,高效运转,开发历史可追溯,我也查阅和学习 ...
- Week 2 代码规范
Question 1: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. My opinion: 我认为恰恰相反,这个可以提高人们的开发效率. 在团队合作当中,如果 ...
- 设计 react 组件
重新设计 React 组件库 诚身 7 个月前 在 react + redux 已经成为大部分前端项目底层架构的今天, 让我们再次回到软件工程界一个永恒问题的探讨上来, 那就是如何提升一个开发团队 ...
- 适合码农工作时玩的游戏:Scrum
适合码农工作时玩的游戏:Scrum 昨天遇到一个来自微软的面试者,在面试的最后,我简单介绍了一下我们团队使用一周一次的 Scrum 来做项目管理.他回答说:” 我在微软也用 Scrum,不过我们一周两 ...
随机推荐
- A20地址线问题
[0]README text description from Zhaojiong's perfect analysis of Linux kernel . [1]A20地址线问题(干货来了) 198 ...
- mongo 介绍
[介绍]:MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.MongoDB 旨在为WEB应用提供可扩展的高性能数据存 ...
- 50道JAVA基础编程练习题 - 题目
50道JAVA基础编程练习题[1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [2]题目:判断 ...
- Hibernate性能优化
1.性能是与具体的项目挂钩的,并不是对于A项目某种优化方法好就适用于B项目.性能需要不断的测试检验出来的.....(废话) 2.session.clear()方法的使用,通常session是有缓存的 ...
- react-navigation遇到的坑
关于goBack返回指定页面 react-navigation是提供了goBack()到指定页面的方法的,那就是在goBack()中添加一个参数,但当你使用goBack('Main')的时候,你会发现 ...
- 开发笔记--java.lang.OutOfMemoryError: PermGen space异常处理
第一次到公司开发项目,比起之前的小项目来说这次的项目特别大,以至于运行之后出现了java.lang.OutOfMemoryError: PermGen space的异常,从字面意思上来看是内存溢出的原 ...
- ansible3
一.setup模块 ansible的setup模块主要用来收集信息,查看参数: [root@localhost ~]# ansible-doc -s setup # 查看参数,部分参数如下: filt ...
- String源码中hashCode算法
针对java中String源码hashcode算法源码分析 /** The value is used for character storage. */ private final char val ...
- es6技巧写法
为class绑定多个值 普通写法 :class="{a: true, b: true}" 其他 :class="['btn', 'btn2', {a: true, b: ...
- initcall_debug简要说明【转】
本文转载自:https://blog.csdn.net/zangdongming/article/details/37769265 Linux version 3.10.40 1. 使用说明 Docu ...