You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并到main分支时校验app.json更新,应选用哪种Git钩子?

问题

我拥有一个名为my-service的GitHub仓库,为追踪应用版本,我在app.json文件中维护版本信息。我希望每次合并代码到main分支时,都能校验app.json是否已更新(即若该文件未更新则阻止合并)。我研究了Git钩子,考虑过git-commit和git-merge钩子,但认为git-commit并不合适,因为它会在每次提交时触发,不符合我的需求。请问git pre-merge钩子是否是实现该需求的正确选择?

解答

先说明白:Git本身根本没有官方的pre-merge钩子,你说的这类钩子并不是Git原生支持的。

要实现合并到main分支时必须校验app.json是否更新,团队场景下最靠谱的做法是用GitHub的分支保护规则加GitHub Actions:

  • 第一步,给main分支开分支保护,要求所有合并必须走Pull Request(PR),而且得通过指定的检查才能合并。
  • 第二步,建一个GitHub Actions工作流文件(比如.github/workflows/check-version.yml),在PR准备合并到main的时候触发,对比PR分支和main分支的app.json内容:
    name: Check Version Update
    on:
      pull_request:
        branches: [ main ]
    
    jobs:
      check-version:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
            with:
              fetch-depth: 2
    
          - name: Check if app.json has been updated
            run: |
              # 对比PR分支和main分支的app.json差异
              git diff origin/main...HEAD -- app.json
              # 如果没差异就报错退出
              if [ $? -eq 0 ]; then
                echo "错误:合并到main分支前必须更新app.json!"
                exit 1
              fi
    
  • 第三步,在分支保护规则里把这个Actions工作流设为必填检查,这样只要PR里没更新app.json,检查就过不了,自然没法合并。

要是你只想约束自己本地的操作,也可以自定义客户端钩子,但这种方式有大问题:

  • 客户端钩子只在你自己电脑上生效,管不了团队里其他人,有人绕过钩子提交的话,照样能合并到main。
  • 比如可以在本地.git/hooks/pre-push钩子加检查,只在推main分支时触发,但也就只能约束你自己而已。

总结:别纠结Git的pre-merge钩子了,用GitHub分支保护+Actions才是团队里最稳妥的方案。

内容的提问来源于stack exchange,提问作者Saturnian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:35:12