首页/开发/Git 与协作速查/服务端钩子与策略落地
进阶与大仓实践69 条

服务端钩子与策略落地

pre-receive、update、post-receive 在服务端仓库执行,无法被客户端绕过,适合做强制策略(拒绝大文件、校验提交格式、触发通知)。

Git 与协作速查开发更新于 2026-10-12
常见钩子pre-receive(整体校验)、update(逐引用)、post-receive(通知/部署)
特点客户端不可跳过;出错会拒绝整次推送
托管平台GitLab 服务端钩子由管理员配置;GitHub 侧以 CI 与分支保护实现同等约束

pre-receive 示意(校验提交信息)

pre-receive 示意(校验提交信息)
#!/bin/sh
while read old new ref; do
  git log --format='%s' $old..$new | grep -qE '^(feat|fix|docs|chore)(\(.+\))?!?: ' || exit 1
done
服务端强策略要给出清晰报错信息,否则贡献者只看到「推送被拒」而无从下手。

易错点

  • 在服务端 hook 里做重活会阻塞所有人的推送,耗时操作改为异步队列
  • 托管平台的仓库目录通常由平台维护,直接在服务器手工改钩子可能被平台覆盖

数据来源与参考

  • Git 官方文档:githooks(服务端钩子)
  • Pro Git 2nd Edition · 8.4 使用强制策略的示例
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌