dev 对应的是线上的测试环境,会有测试人员对上线功能做测试
master 对应的是线上的生产环境
比如新开发了一个关于 youtube 的功能,叫做 feature/support_youtube_crawler
分支
开发完成 feature/support_youtube_crawler
之后,会在 gitlab 弄一个合并请求(merge request)从 feature/support_youtube_crawler
merge 到 dev
管理人员完成合并之后,会自动触发 cicd,部署到测试环境之后,测试人员会进行测试,如果测试通过。
则需要把新功能上到 master 中
⚠️,类似feature/support_youtube_crawler
这样的新功能,同时会存在很多,比如feature/support_x_crawler
、feature/support_facebook_crawler
、feature/support_ins_crawler
、feature/support_douyin_crawler
等等。所以不能 git checkout master && git merge dev ,因为这样会把很多还未经过测试的 commit 也带到 master
这时候问题来了,怎么把 feature/support_youtube_crawler
优雅的合到 master 呢?
gitlab 上好像没有这个便捷按钮来实现(如果有就最好了,但是没有发现)
如果自己使用 git 来实现,具体用哪个命令呢?
merge?cherry-pick?
我能想到的是 merge,因为可以保留提交记录和合并记录,大家是怎么用的?有更好的方式可以分享吗?
如果选用 merge 的话,也还可以细分好多种路线:
- 路线一:让
feature/support_youtube_crawler
对应的开发自己再重新提交一个 pr 到 gitlab,由管理人员点击确认 - 路线二: 让
feature/support_youtube_crawler
对应的开发把feature/support_youtube_crawler
也 push 到 gitlab。由管理人员 checkoutfeature/support_youtube_crawler
到本地后,手动 merge 到 master,再删除远程分支
哪个更好呢?
说一下我们团队的方案,我们是在功能分支(feature/support_youtube_crawler)、dev、master之外还有个用来测试的分支,方便每次功能迭代的时候发测试用;每个功能分支在开发阶段是合并到测试分支,这个测试分支只用来开发阶段的功能验证。开发周期结束的时候,需要开发人员提PR到dev(如果某个功能不需要发布的,不可以提交PR到dev),代码评审之后,会部署dev分支给测试人员完成测试+业务验收;测试过程中出现的BUG修复还是在各自的功能分支修复之后提PR到dev;dev经过测试和业务验收之后会合并到master;
这个类似于你说的路线一,不过比你说的多了一个测试分支,这个测试分支每次迭代都会从dev拉取一个新的;
希望可以帮到你。