我们团队的版本管理
描述
- 我们一个项目一般包括以下几个分支: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的分支吗?那只有一台测试服务器,多人多功能开发,如何进行协调呢?