git commit时pre-commit钩子未正常运行的问题咨询
问题排查:pre-commit钩子在git commit时不触发
以下是几个常见原因及对应的解决步骤:
1. 未完成pre-commit钩子的Git注册
你通过Poetry安装了pre-commit,但还需要将钩子绑定到本地Git仓库的hooks目录。执行以下命令完成注册:
poetry run pre-commit install
该命令会在.git/hooks/目录生成pre-commit脚本,Git在执行commit操作时会自动调用这个脚本触发钩子。
2. 检查Git钩子文件的状态
- 确认
.git/hooks/pre-commit文件存在且具备可执行权限:ls -la .git/hooks/ - 若文件存在但无执行权限,添加权限:
chmod +x .git/hooks/pre-commit - 若文件不存在,重新执行
poetry run pre-commit install。
3. 验证提交文件是否符合钩子触发条件
- 你的pre-commit配置仅启用了
ruff和ruff-format钩子,这两个钩子默认只处理.py文件,提交非Python文件时钩子不会运行。 - 检查
.ruff.toml中的exclude配置,确认提交的文件或所在目录未被排除(比如venv/等目录会被自动跳过,但这类文件通常不会被提交)。
4. 确保使用正确的虚拟环境
pre-commit通过Poetry安装在虚拟环境中,需确保commit操作处于该环境内:
- 先激活虚拟环境:
再执行poetry shellgit commit命令。
5. 查看调试日志定位问题
若以上步骤无效,开启pre-commit调试模式查看详细日志:
PRE_COMMIT_DEBUG=1 git commit
日志会显示钩子是否被调用、文件是否被过滤等信息,帮助定位具体问题。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

