Git的pre-push钩子可手动执行但推送时未被触发,该如何排查解决?
问题排查及解决步骤
- 文件名配置错误
Git钩子要求文件完全匹配预设名称,不能带任何后缀。你当前的脚本带了.sh后缀,手动执行的是pre-push.sh,但Git只会识别.git/hooks目录下无后缀的pre-push文件,直接删除文件的.sh后缀即可。 - 缺少可执行权限
即使在Windows环境使用Git Bash,也需要给钩子文件添加可执行权限:进入.git/hooks目录后执行命令chmod +x pre-push即可。 - 自定义钩子路径覆盖了默认配置
如果你之前修改过Git的钩子路径配置,默认的.git/hooks目录会失效,可执行命令git config --get core.hooksPath检查:如果返回非空结果,要么把你的pre-push文件放到返回的自定义路径下,要么执行git config --unset core.hooksPath恢复默认钩子路径。 - Git版本过旧
pre-push钩子是Git 1.8.2版本才新增的功能,如果你的Git版本低于该版本也无法触发,可执行git --version检查版本,升级到最新版即可。
验证方法
修改完成后可执行git push --dry-run测试,不需要真的执行推送就能触发pre-push钩子,验证是否能正常输出你写的日志内容。
内容的提问来源于stack exchange,提问作者Mangos
相关产品推荐
相关产品推荐

