我们团队的版本管理
描述
- 我们一个项目一般包括以下几个分支:relase、develop、feature和hotfix分支。顾名思义,relase是生产分支,生产服务器跑的代码就是这个分支的代码。develop是测试分支,测试服务器跑的代码就是这个分支的代码;
- 如果需要开发一个新功能,就从release切一个分支。例如取名叫“feature/20190915_支付”。然后进行开发,开发完合并到development。QA在测试到Bug,在本地“feature/20190915_支付“分支进行修复,然后合并到developmen,然后发到测试服务器。一切Bug都修复完,再将“feature/20190915_支付”合并到release,将release发布到生产服务器;
- 上线完,可以将“feature/20190915_支付”分支删除掉,因为release分支已经包含这个分支的代码;
- 如果上线完,发现有Bug。就从release分支切一个分支,例如叫“hotfix/支付Bug”。修复完,合并到development。QA测试完,然后将“hotfix/支付Bug”分支合并到release。
存在的问题
上面的流程存在一个问题:所有的feature分支都往development上面合并,会导致冲突。例如“feature/20190915_支付”和“feature/20190915_购物车”同时修改了同一个地方,然后都往development上面合,就会产生冲突。
关于git-flow
简述
git-flow工作流包括以下几个分支:master、develop、release、feature和hotfix分支。生产环境跑的分支是master分支的代码。develop是开发分支。这两个分支都是长期存在的。而release、feature和hotfix分支是暂时存在。新功能开发的时候,都是基于develop去切一个feature分支。然后提测,测试完发现没有问题,就生成一个relase分支。最后将relase分支合并到master分支。
思考
- 在使用gitFlow工作流的时候,都是基于develop进行切一个feature分支,那么如何保证develop是稳定的测试合格的分支呢?是否会存在未测试完的代码?
- 即使事先约定好了,develop分支不能包含未测试合格的代码?那测试环境跑的代码是哪个分支的呢?是每个人自己feature的分支吗?那只有一台测试服务器,多人多功能开发,如何进行协调呢?
参考
每个分支的开发者在向其它分支合并时都要先合并其它分支的代码,解决完全冲突才能合并到其它分支 dev分支本身就不是稳定的版本,当然可以包含未测试的代码
@zengming00 也就是说有冲突都是很正常的了?合并的时候,发生冲突是很正常的啊?有没有一种一劳永逸的方法?
@sunfeng90 有冲突当然正常了,除非只有你一个人开发,所以冲突应该由提pr的人来解决,一劳永逸的方法就是不管三七二十一 git push -f 哈哈
楼上的 -f 当心被砍哟。。
@sunfeng90 冲突是很正常的。不管你用啥版本管理软件,甚至用 ftp ,都是存在冲突的。
@zengming00 @waitingsong 好的,谢谢各位。大家觉得我们团队git流程规范怎么样?有没有需要改进的地方?我觉得我们缺少打Tag这一环节
git flow 创建 feature可以指定base呀,默认才是develop分支
我们开发feature分支是从develop切出来的,hotfix分支才是从release分支切。
@sunfeng90 tag 只是一个小点,我觉得你们现在的 tag 在每次 merge 到 release 中已经体现了一些。 另外,我有个问题,你们 develop 分支的意义是什么,如果只是为了测试使用,为什么不直接把 feature 分支发到测试环境测试。
每个团队都有适合自己的git flow,强行使用别人的方式就会出现问题。冲突不可避免,你们的问题是任务分配不合理,比如下单,支付本来就是一条线上的,肯定会修改同一份代码,分为多个人来做怎么可能不冲突
@JianmingXia develop分支就是测试分支,跑测试环境上的。如果多人同时开发多个feature,只有一台测试服务器,那么如何做到多个测试同时测试呢?所有我们就有了develop。大家将feature同时合并到develop上,然后将develop部署到测试环境。
@yuedun 貌似你说的有道理。有时候任务紧急,谁闲了就谁做。确实存在分配任务不合理的情况。
@zhhb 这个base是基于哪个呢?我理解的是我们现在的relase,也就是线上跑的测试没有问题的代码分支。
@sunfeng90 大家都往develop合,有冲突是正常的,只要 develop 也跑测试怎么会有问题呢?