本地pre-commit与GitHub pre-commit.ci执行结果不一致求助
本地pre-commit与pre-commit.ci执行结果不一致(isort检查不匹配)
本地执行git commit -m "pre-commit run --all-files"后,所有检查项(包括isort)均通过,执行输出如下:
% git commit -m "pre-commit run --all-files" [WARNING] Unstaged files detected. [INFO] Stashing unstaged files to /home/econdami/.cache/pre-commit/patch1678211848-117234. check for added large files..............................................Passed check python ast.........................................................Passed check for case conflicts.................................................Passed check docstring is first.................................................Passed check json...........................................(no files to check)Skipped check for merge conflicts................................................Passed check toml...........................................(no files to check)Skipped check xml............................................(no files to check)Skipped check yaml...........................................(no files to check)Skipped debug statements (python)................................................Passed fix end of files.........................................................Passed fix python encoding pragma...............................................Passed python tests naming..................................(no files to check)Skipped trim trailing whitespace.................................................Passed black....................................................................Passed isort (python)...........................................................Passed interrogate..............................................................Passed flake8 under python3.....................................................Passed [INFO] Restored changes from /home/econdami/.cache/pre-commit/patch1678211848-117234. [master ec627fd2] pre-commit run --all-files 1 file changed, 1 insertion(+), 2 deletions(-)
但执行git push后,pre-commit.ci上isort检查出现问题,已查阅pre-commit.ci配置文档但未找到问题根源,请求排查。
排查方向
- isort版本不一致:本地和pre-commit.ci使用的isort版本可能存在差异,导致规则解析结果不同。可在本地运行
isort --version查看版本,对比pre-commit.ci日志中的isort版本;建议在.pre-commit-config.yaml中固定isort的具体版本,比如指定rev: 5.12.0。 - 配置文件加载差异:确认本地与CI环境是否加载了相同的isort配置(如
.isort.cfg、pyproject.toml中的[tool.isort]段)。本地可能存在全局配置(如~/.isort.cfg)覆盖仓库配置,而pre-commit.ci仅读取仓库根目录的配置。可通过本地执行isort --show-config查看生效配置,再对比CI环境的配置情况。 - Python版本差异:isort的行为可能受Python版本影响,检查本地Python版本与pre-commit.ci使用的Python版本是否一致。可在
.pre-commit-config.yaml的isort钩子中添加language_version: python3.x指定版本,确保环境一致。 - 文件状态差异:确认本地提交后push的代码与本地检查时的代码是否完全一致。可通过
git diff HEAD^ HEAD查看提交内容,对比CI中检查的文件内容是否存在差异。 - pre-commit缓存问题:本地pre-commit可能依赖缓存未重新检查文件,执行
pre-commit clean清除缓存后,再运行pre-commit run --all-files,看结果是否与CI一致。
内容的提问来源于stack exchange,提问作者servoz
相关产品推荐
相关产品推荐

