讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

AniShort
AniShort

AI短剧协同制作平台

Python pre-commit 的 hooks 配置

阿雪姑娘_1436

阿雪姑娘_1436

发布时间:2026-02-25 20:01:02

|

1078人浏览过

|

来源于php中文网

原创

.pre-commit-config.yaml 必须放在项目根目录,文件名严格为该名称且后缀为 .yaml;rev 字段须填确定的 commit hash 或 tag,不可用分支名;Python hooks 需显式声明 language_version;运行时应指定 --hook-stage pre-commit 以匹配 git commit 行为。

python pre-commit 的 hooks 配置

pre-commit 配置文件写在哪、叫什么名

必须叫 .pre-commit-config.yaml,且必须放在项目根目录。不是 pre-commit-config.yaml,也不是 .pre-commit-config.yml——虽然 YAML 规范允许 .yml,但 pre-commit 工具只认 .yaml 后缀,否则会静默忽略配置。

常见错误现象:pre-commit install 成功,但提交时 hooks 完全不触发;或者 pre-commit run --all-files 报错 No config file found。

  • 检查路径:运行 ls -a 确认文件存在且名字拼写完全一致
  • 确认缩进:YAML 对空格敏感,repos: 必须顶格,每个 hook 的 id: 和 rev: 必须对齐且用空格(不能用 Tab)
  • Windows 用户注意:编辑器可能默认保存为 UTF-8 with BOM,会导致解析失败;建议用 VS Code 或 Notepad++ 显式选 “UTF-8 no BOM”

hooks 里 rev 字段填什么、为什么不能写 latest

rev 必须填确定的 Git commit hash 或 tag(如 v4.3.0),不能写 latest、main 或 master。因为 pre-commit 会在本地克隆仓库并 checkout 到该 rev,如果填分支名,每次运行都可能拉到不同代码,破坏可重现性——CI 和同事的环境结果就不一致。

使用场景:团队协作、CI 流水线、代码审查前自动检查。

立即学习“Python免费学习笔记(深入)”;

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载
  • 查可用 tag:访问对应 hook 仓库的 GitHub Releases 页面,例如 pre-commit-hooks 在 https://www.php.cn/link/403e7163b5aef0323eee42fe413bccc5
  • 别盲目升级:比如把 rev: v4.2.0 改成 v4.3.0 前,先本地跑 pre-commit run --all-files,确认没新增误报或破坏性变更
  • 某些 hook(如 pylint)需要额外安装依赖,rev 不匹配会导致 hook failed (return code 1) 且无明确提示

Python hooks(如 black、isort、pylint)怎么指定 Python 版本

靠 language_version 字段控制,不是靠系统默认 Python 或 virtualenv。它告诉 pre-commit 用哪个版本的 Python 解释器来运行 hook,直接影响语法兼容性(比如用了 := 海象运算符,就得设 language_version: python3.8+)。

常见错误现象:black 报 SyntaxError: invalid syntax;pylint 检出大量 undefined-variable,实际是类型提示里用了新语法但解释器太老。

  • 推荐显式声明:在每个 Python hook 下加 language_version: python3.11(和项目 pyproject.toml 里要求的一致)
  • 不要依赖 default_language_version 全局设置——它只对未声明 language_version 的 hook 生效,容易漏掉
  • 如果 hook 自身不支持目标 Python 版本(比如旧版 pylint 不支持 3.12),pre-commit 会在 install 阶段报错 Failed to install environment,需降级 rev 或换工具

pre-commit run 和 git commit 触发行为不一致怎么办

根本原因是:git commit 走的是 pre-commit 的「pre-commit」stage,而 pre-commit run 默认走的是「commit」stage,但很多 hook(尤其是 lint 类)只注册在「pre-commit」stage。所以手动 run 时没报错,commit 却卡住。

性能影响:重复执行 hook 会拖慢提交速度;stage 错配则导致检查失效,失去意义。

  • 查 hook 注册 stage:看其文档或源码里的 entry 和 types,例如 black 默认只在 pre-commit,check-yaml 可在多个 stage
  • 强制 stage 匹配:运行 pre-commit run --hook-stage pre-commit --all-files 模拟真实提交流程
  • 调试技巧:加 -v 参数,比如 git commit -m "test" -v,能看到具体哪个 hook 被调用、传了哪些文件、返回码多少

最常被忽略的是:.pre-commit-config.yaml 里某个 repo 的 hooks 列表里混进了只适用于其他 stage(如 pre-push)的 hook,却没删干净,导致 commit 时意外触发失败。

热门AI工具

更多
花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6384

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3504

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1932

2025.10.17

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

12325

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

5547

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

2516

2025.12.25

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

8865

2026.01.21

GitHub官网入口版本汇总
GitHub官网入口版本汇总

本专题整合了GitHub入口版本地址汇总,阅读专题下面的文章了解更多详细内容。

998

2026.04.02

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn