0

0

Python pre-commit 的 hooks 配置

冷炫風刃

冷炫風刃

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

|

998人浏览过

|

来源于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),不能写 latestmainmaster。因为 pre-commit 会在本地克隆仓库并 checkout 到该 rev,如果填分支名,每次运行都可能拉到不同代码,破坏可重现性——CI 和同事的环境结果就不一致。

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

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

Selenium+Python配置 中文WORD版
Selenium+Python配置 中文WORD版

本文档主要讲述的是Selenium+Python配置;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

下载
  • 查可用 tag:访问对应 hook 仓库的 GitHub Releases 页面,例如 pre-commit-hookshttps://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+)。

常见错误现象:blackSyntaxError: invalid syntaxpylint 检出大量 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:看其文档或源码里的 entrytypes,例如 black 默认只在 pre-commitcheck-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工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

1559

2023.10.24

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

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

240

2024.02.23

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

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

127

2025.10.17

undefined是什么
undefined是什么

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

5856

2023.07.31

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

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

3262

2024.08.14

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

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

1421

2025.12.25

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

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

2831

2026.01.21

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

914

2023.07.05

batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

127

2026.02.25

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号