现在git已经是我们日常开发必备工具,那么在移动客户端的日常开发中,应该怎样去管理git分支呢,是否目前普遍的几种工作流就可以满足目前的情景呢?
最官方的流程,包含的主要分支有如下几个:
按照以上说法,流程也是比较清晰明确,大致如下
develop master
* |
---------| |
/ | |
feature1 | *
| | |
* | *
| * /|
* / | / |
| feature2 | bug-fix |
* | | | |
| * | * |
| * | / \ |
| \ * -------/ \ |
\ * *
--------- * |
|\ |
| \----------- * release
| |
git flow还是比较麻烦的,所以后来一些网站并没有推荐。
这两个工作流都是持续集成的模式,大致包含的分支如下:
功能分支和bug fix都是从主分支上拉出来改,再合并回去。流程上比git flow更加简单。
但是以上几种真的适合目前我们的开发吗?
linux这种大型项目,人员分布于世界各地,而每一次发布的功能又非常的多,为了保证所有人的协同工作不会出现任何偏差,所以他们采用了git flow这种工作流。
这类项目有着如下特点:
linux为了解决自身庞大的系统的情况,在git flow外面再套了一层git flow,有着相当严格的代码审查制度,这个是后话了。可以看出如果是一个瀑布型开发场景,还是非常合适的,但是我们目前的移动开发几乎都是敏捷开发。
这个比较适合网站这类的开发,当完成新特性后,马上就可以展示给用户,并不需要卡时间点。
所以git flow对于现在的情况来说太慢了,而且导致分支间切换太频繁。但是其他几种又不能很好的区分版本,所以我们需要自己的工作流程。
master
---------------- *
/ |
v1.0 |
| ------- *
* / |
/ | bugfix |
feature-x * | |
| * * |
* * / *
\ * ---- / |
* v1.1 |
test * | |
\ | |
-----------+-- * release
| *
* / |
test * |
\ |
- * release
这样看上去似乎比其他几个复杂,但是实践下来应该说更加简单。
所以正常的使用中,可见的分支为master和版本分支,会比上图简单很多。
但是这样做的缺点是无法明确的区分feature,如果需要去掉某一个功能的时候会比较麻烦,基于每次的迭代都是相对明确,不太可能出现功能回退的情况,所以不存在这种问题。
总的来说,适合的才是最好的。
本文来自网易实践者社区,经作者段家顺授权发布。