钩子脚本内容没问题,手动执行能跑,git commit 却一点提示都没有。ls -l .git/hooks/pre-commit 显示 -rw-r--r--,没有执行位。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,Git 通过 exec 调用钩子,文件没有可执行权限就跳过,返回码也不影响提交。从 Windows 拷过来的脚本还常带 CRLF,shebang 解析失败也会被忽略。
碰到「钩子执行权限」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。改完顺手把文档补一句,省得下次自己重新推一遍。
ls -l .git/hooks/pre-commit chmod +x .git/hooks/pre-commit git config core.hooksPath .githooks
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,ls -l .git/hooks 检查目标钩子的权限位;chmod +x 补上执行权限 再提交一次验证;脚本首行 shebang 用 #!/bin/sh 或 #!/usr/bin/env bash;用 file 命令确认没有 CRLF 行尾;团队统一放到 hooks 目录并用 core.hooksPath 指向。
最后用这个标准收尾,再提交一次钩子输出正常打印 故意写个错能拦住提交。
