关于git-flow的一点思考
发布于 5 年前 作者 sunfeng90 7395 次浏览 来自 问答

我们团队的版本管理

描述

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

参考

19 回复

每个分支的开发者在向其它分支合并时都要先合并其它分支的代码,解决完全冲突才能合并到其它分支 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 也跑测试怎么会有问题呢?

可以新增一个staging分支, 用于部署待测试的功能, 该分支也是QA接触的分支; 这样可以将QA与development隔离, 因为development是develop-oriented的, 可以容忍bug.

@keith666666 那此时的development的分支是完全测试完的分支,没有任何Bug的?

@sunfeng90 此时development分支是开发分支, 可以容忍bug; staging是测试分支, 是开发觉得ok了给测试来测的, 测试ok就可以推生产了

话说nodejs 开发很少用maven么

@nwljy 对的,反正我经历的公司没有用这个的。

回到顶部