git:如何禁止dev分支合并到其他任意分支?
场景描述:
- 公司内部本地测试环境的分支是dev分支,这个分支集成了其他开发分支和bug分支;
- 开发分支和bug分支是从最新的master分支
git checkout -b
创建出来的; - 内部已经约定好禁止dev分支合并到其他分支,但是难免手误或者新人接手项目误把dev分支合并到自己的开发分支。
问题:
所以,是否可以通过配置,禁止dev分支合并到其他分支,并且不影响开发分支和bug分支push、merge到dev分支呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
相对于讨论“如何不把
dev
合并到其他分支”,我更想讨论一下为什么需要把dev
合并到其他分支。一般
main/dev/task
模式的分支结构,main
用于发布(至少是预发布),dev
用于发布前的测试,task
也就是所谓的“其他分支”,属于每个任务或者 BUG 的小分支。通常情况下应该是task
合并到dev
,dev
测试无误之后再合并到main
发布。而task
一般也是从dev
创建出来的。如果上述说明符合你们现在的开发规范,那就继续,否则可能就没有继续的必要了。
现在的问题有两个
dev
分支合并发task
分支会产生什么不好的影响?对于第 1 个问题我无法回答,确实也想不明白。但是对于第 2 个问题,不妨假设一个场景:
dev
分支上有d1
~d3
几个版本,同时有一个需求任务和一个 BUG 修复任务。dev
创建了分支task1
和task2
,他们都是从d3
创建出来的分支。task1
中提交了a1
~a3
;同时task2
提交了b1
~b2
。现在
task2
的 BUG 修复任务完成了,于是合并到dev
上,dev
上现在是... d3, b1, b2, d4
,其中d4
是合并节点。接下来,做
task1
的小伙伴发现task2
解决了一个一直困扰着他的问题,这个问题会影响task1
的完成。他现在该怎么办呢?两个办法task2
在task1
中完成一遍(显然这个方式不可取)dev
把taks2
的修复合并过来,并在此基础上继续完成task1
(这才是正解)于是,合并产生了
a4
。再继续修改提交了
a5
,完成任务。当然得把task1
合并到dev
去到目前为止,一切都很完美。也许
task1
在merge dev
的时候会有冲突,但是这个冲突会在task1
上解决。当从解决了冲突的task1
合并到dev
的时候,是不会发生冲突的。现在唯一需要解决的问题是:
dev
作为一个相对稳定和集中的分支,不应该谁都往上合并,应该由有一定能力的人来合并。而在做到这一点,就是把dev
保护起来,作为一个受保护的分支,只允许具有一定权限的人合并,或者只允许通过 PR 合并 —— 而 PR 合并的形式是可以在确定合并前进行审查的(目前大部分 Git 管理系统应该都支持),可以进一步保障合并代码的安全性。但是,如果任务比较多,向
dev
合并的时候难免会有冲突。比如上述task1
和task2
都动到了同一段代码,而且都提了 PR,那么后确定合并的一个一定会冲突。这种情况下只需要拒绝 PR,请他把最新的dev
合并过去,同时解决冲突,再提 PR 就好了。综上,允许把
dev
合并到任务分支还是有不少好处的。stackoverflow
上看到两个思路,深入深入也许可行,供大家参考:如果尝试成功,我再来补充,各位有好的思路欢迎交流