git:如何禁止dev分支合并到其他任意分支?

发布于 2022-09-13 00:26:54 字数 361 浏览 23 评论 0

场景描述:

  1. 公司内部本地测试环境的分支是dev分支,这个分支集成了其他开发分支和bug分支;
  2. 开发分支和bug分支是从最新的master分支git checkout -b创建出来的;
  3. 内部已经约定好禁止dev分支合并到其他分支,但是难免手误或者新人接手项目误把dev分支合并到自己的开发分支。

问题:

所以,是否可以通过配置,禁止dev分支合并到其他分支并且不影响开发分支和bug分支push、merge到dev分支呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仲春光 2022-09-20 00:26:54

相对于讨论“如何不把 dev 合并到其他分支”,我更想讨论一下为什么需要把 dev 合并到其他分支。

一般 main/dev/task 模式的分支结构,main 用于发布(至少是预发布),dev 用于发布前的测试,task 也就是所谓的“其他分支”,属于每个任务或者 BUG 的小分支。通常情况下应该是 task 合并到 devdev 测试无误之后再合并到 main 发布。而 task 一般也是从 dev 创建出来的。

如果上述说明符合你们现在的开发规范,那就继续,否则可能就没有继续的必要了。

现在的问题有两个

  1. 如果把 dev 分支合并发 task 分支会产生什么不好的影响?
  2. 如果允许合并又有什么好处?

对于第 1 个问题我无法回答,确实也想不明白。但是对于第 2 个问题,不妨假设一个场景:

  • 现在 dev 分支上有 d1 ~ d3 几个版本,同时有一个需求任务和一个 BUG 修复任务。
  • 于是分别从 dev 创建了分支 task1task2,他们都是从 d3 创建出来的分支。
  • 开发过程中,task1 中提交了 a1 ~ a3;同时 task2 提交了 b1 ~ b2
  • 现在 task2 的 BUG 修复任务完成了,于是合并到 dev 上,dev 上现在是 ... d3, b1, b2, d4,其中 d4 是合并节点。

    flowchart LR
    
    d1 --> d2 --> d3
    d3 -->|task1| a1 --> a2 --> a3
    d3 -->|task2| b1 --> b2 --> d4
    d3 -->|merge task2| d4
  • 接下来,做 task1 的小伙伴发现 task2 解决了一个一直困扰着他的问题,这个问题会影响 task1 的完成。他现在该怎么办呢?两个办法

    • 1) 自己干掉这个问题,相当于把 task2task1 中完成一遍(显然这个方式不可取)
    • 2) 从 devtaks2 的修复合并过来,并在此基础上继续完成 task1(这才是正解)
  • 于是,合并产生了 a4

    flowchart LR
    
    d1 --> d2 --> d3
    d3 -->|task1| a1 --> a2 --> a3
    d3 -->|task2| b1 --> b2 --> d4
    d3 -->|merge task2| d4
    
    a3 -->|merge dev| a4
    d4 --> a4
  • 再继续修改提交了 a5,完成任务。当然得把 task1 合并到 dev

    flowchart LR
    
    d1 --> d2 --> d3
    d3 -->|task1| a1 --> a2 --> a3
    d3 -->|task2| b1 --> b2 --> d4
    d3 -->|merge task2| d4
    
    a3 -->|merge dev| a4
    d4 --> a4
    
    a4 --> a5
    a5 --> d5
    d4 -->|merge task1| d5

到目前为止,一切都很完美。也许 task1merge dev 的时候会有冲突,但是这个冲突会在 task1 上解决。当从解决了冲突的 task1 合并到 dev 的时候,是不会发生冲突的。

现在唯一需要解决的问题是:dev 作为一个相对稳定和集中的分支,不应该谁都往上合并,应该由有一定能力的人来合并。而在做到这一点,就是把 dev 保护起来,作为一个受保护的分支,只允许具有一定权限的人合并,或者只允许通过 PR 合并 —— 而 PR 合并的形式是可以在确定合并前进行审查的(目前大部分 Git 管理系统应该都支持),可以进一步保障合并代码的安全性。

但是,如果任务比较多,向 dev 合并的时候难免会有冲突。比如上述 task1task2 都动到了同一段代码,而且都提了 PR,那么后确定合并的一个一定会冲突。这种情况下只需要拒绝 PR,请他把最新的 dev 合并过去,同时解决冲突,再提 PR 就好了。

综上,允许把 dev 合并到任务分支还是有不少好处的。

彼岸花似海 2022-09-20 00:26:54

stackoverflow上看到两个思路,深入深入也许可行,供大家参考:

  1. Don't allow branch to merge to another branch
  2. GIT hook to prevent an experimental branch pushed to a release, or master branch

如果尝试成功,我再来补充,各位有好的思路欢迎交流

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文