你们公司分支策略是什么样的

开发 前端
在基于git的工作流中,master一般是做持续集成的,开发人员在特性分支开发,经过测试后,就会merge到master做集成测试,测试通过就表示master可部署了。

[[355431]]

本文转载自微信公众号「虞大胆的叽叽喳喳」,作者虞大胆  。转载本文请联系虞大胆的叽叽喳喳公众号。 

在基于git的工作流中,master一般是做持续集成的,开发人员在特性分支开发,经过测试后,就会merge到master做集成测试,测试通过就表示master可部署了。

可现实情况下,特性分支自测没问题,不代表就真的没问题,测试人员还没测试呢,所以此时的master分支其实是没准备好的(从master特定commit id到生成分支其实是有一定难度的)

我们目前的做法,在master分支之前还有一个SIT系统集成分支,也就是说这个分支是专门给QA人员测试的,测试没问题后,将特性分支的代码合并到pre分支,仿真环境如果没问题,再将特性分支合并到master分支,然后进行发布。

SIT分支相当于做集成测试了,保证了master的代码是相对可靠的。

那什么代码合并到SIT分支呢?不管几个项目,也不管这些项目具体的上线时间,特性分支都可以合并到SIT分支,然后统一给QA人员测试(相当于提前测试多个项目了),正因为这样,上线的时候无法从SIT分支merge到master分支。

这种工作流多了一个步骤,必然会有副作用,首先merge到SIT分支的时候,如果有冲突,SIT分支不应该解决冲突,因为SIT分支只是为了测试,不会上线的,所以不应该解决冲突;其次很多人说为了避免有冲突,那么我就经常性的将SIT分支上的代码merge(也就是pull)到特性分支,这也非常不好,因为这个特性分支就不隔离了。所以正确的做法,如果merge到SIT分支产生冲突,应该自己去解决冲突,可如何找到和那个分支冲突呢?

还有SIT分支和master分支因为时间点和作用不一样,没有必要保持代码是同步,可pre分支和master分支理论上应该保持同步,上线的时候没有选择merge SIT分支到master分支的原因是cherry-pick还是有一定复杂度的,merge特定commit id也是有复杂度的,所以我们选择从特性分支合并到master,那必然要思考一个问题,pre分支测试通过代表master分支测试通过吗?如果pre到master是一个fast forward,理论上不用再重复测试。

还有一种做法和我们的做法类似,就是有一个隐形的SIT分支,特性分支一旦提交到远端,就自动merge到SIT分支,查看是否有冲突,如果有冲突,就提醒开发者去解决,从而保障能够持续集成。

最后说说特性分支,我们还喜欢根据迭代周期去弄一个大分支,实际上这个大分支包含了很多子功能,也就是说可以拆分为多个子分支,那这两种方式有什么优缺点呢?

如果在一个大分支,能够减少一些冲突,但做不到隔离了,如果频繁的pull,是选择merge还是rebase呢?应该选择merge,推送到远端的分支不建议做rebase,会产生很多问题。其实既然选择了一个大分支,那git历史记录必然会很难看的,基本没有追朔性。如果实在要使用一个大分支,建议不要太频繁的提交到远端,尽量做好自测再提交。SIT部署的环境(QA)是为了测试人员测试的,应该保障一定的稳定性,它们不是给开发人员调试用的。

建议还是子分支,一方面说不定有一天就上线部分功能,子分支就合适了;另外子分支也能做到隔离;当然可能会遇到很多merge冲突的问题,这时候就需要自己甄别与那个分支发生冲突了(目前没有想到办法)。

git工作流有多种选择,主要看整个团队对git的理解程度,并行项目数量,CI/CD方式等等,没有绝对的好坏,只要能说得通,没有明显的缺点,那就是好的工作流。

 

责任编辑:武晓燕 来源: 虞大胆的叽叽喳喳
相关推荐

2015-04-08 10:40:09

2009-03-25 09:45:15

美国软件公司工作环境

2022-10-30 15:03:25

人工智能仓库管理机器人

2013-01-31 11:51:37

开源KVM

2013-02-27 10:53:16

开源KVM

2015-12-31 09:36:55

程序员最理想公司

2017-07-27 16:25:54

云管理公共云合并

2017-12-17 16:53:27

云计算亚马逊云端

2013-08-20 10:31:16

云计算2.0云计算

2024-06-27 08:55:41

2015-09-29 10:55:13

初创技术架构

2023-01-09 11:54:13

物联网IOT

2012-11-09 10:11:42

搜索引擎

2023-12-04 06:55:16

2013-11-29 10:17:49

5G4G网络融合

2022-09-09 07:35:23

循环依赖Spring构造器

2012-10-09 09:45:43

数据库实时大数据云计算

2013-06-07 09:59:40

Google实习面试

2022-03-11 09:20:48

中小企业物联网

2015-09-21 17:58:37

壁纸Ubuntulinux
点赞
收藏

51CTO技术栈公众号