直接执行pre-commit与通过Makefile/脚本执行结果不一致问题
问题:pre-commit 通过 Makefile/脚本执行时误报Passed
直接在命令行执行pre-commit钩子检查时能正确检测出问题(返回Failed),但通过Makefile或bash脚本执行相同命令时,所有钩子(如mypy、ruff、black)都误报Passed,该问题同样出现在Bitbucket流水线中。
现象对比
- 直接执行命令:
pre-commit run mypy --files ./pyworker_v2/**/*,结果正确显示Failed - 通过Makefile或bash脚本执行上述命令,结果错误显示Passed
相关配置与执行输出
Makefile 配置
SOURCE_DIR=./some_codebase/**/* check-mypy: pre-commit run mypy --files $(SOURCE_DIR)
Makefile执行输出
$ make check-mypy pre-commit run mypy --files ./pyworker_v2/**/* mypy.....................................................................Passed
直接命令行执行输出
$ pre-commit run mypy --files ./pyworker_v2/**/* mypy.....................................................................Failed - hook id: mypy - exit code: 1
.pre-commit-config.yaml 配置
minimum_pre_commit_version: 3.3.3 repos: - repo: local hooks: - id: mypy name: mypy entry: mypy --config-file ./pyproject.toml --enable-incomplete-feature=Unpack --install-types --non-interactive language: system types: [python]
测试用bash脚本
#!/bin/bash pre-commit run mypy --files ./pyworker_v2/**/*
已尝试的无效操作
- 使用绝对路径替代相对路径执行命令,问题未解决
- 测试不存在的目录路径,pre-commit能正确检测并返回失败,说明路径解析逻辑正常
- 查阅并清理git hook缓存、pre-commit缓存,未找到问题根源
内容的提问来源于stack exchange,提问作者Truong Hoang
相关产品推荐
相关产品推荐

