pre-commit-hooks
pre-commit 的一些开箱即用的钩子。
另请参阅:https://github.com/pre-commit/pre-commit
在 pre-commit 中使用 pre-commit-hooks
将此添加到你的 .pre-commit-config.yaml
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0 # Use the ref you want to point at
hooks:
- id: trailing-whitespace
# - id: ...
可用的 Hooks
check-added-large-files
防止提交过大的文件。
- 使用
args: ['--maxkb=123']指定“过大”的标准(默认=500kB)。 - 仅检查 git 标记为待添加(staged for addition)的文件。
- 如果安装了
git-lfs,将跳过 lfs 文件 (需要git-lfs>=2.2.1) --enforce-all- 检查所有列出的文件,而不仅仅是待添加的文件。
check-ast
仅检查文件是否能解析为有效的 python。
check-builtin-literals
在初始化空或零值的 Python 内置类型时,要求使用字面量语法。
- 允许使用位置参数调用构造函数(例如,
list('abc'))。 - 允许从
builtins(__builtin__)命名空间调用构造函数(builtins.list())。 - 使用
--ignore=type1,type2,…忽略特定内置类型的此要求。 - 使用
--no-allow-dict-kwargs禁止dict关键字语法。
check-case-conflict
检查在 MacOS HFS+ 或 Windows FAT 等不区分大小写的文件系统中会产生冲突的文件名。
check-executables-have-shebangs
检查非二进制可执行文件是否具有正确的 shebang。
check-illegal-windows-names
检查无法在 Windows 上创建的文件。
check-json
尝试加载所有 json 文件以验证语法。
check-merge-conflict
检查包含合并冲突字符串的文件。
--assume-in-merge- 允许在没有进行中的合并操作时运行该 hook
check-shebang-scripts-are-executable
检查带有 shebang 的脚本是否具有可执行权限。
check-symlinks
检查指向空目标的符号链接。
check-toml
尝试加载所有 TOML 文件以验证语法。
check-vcs-permalinks
确保指向 vcs 网站的链接为永久链接。
--additional-github-domain DOMAIN- 添加对指定域名的检查。 可以多次重复使用。 例如,如果您的公司使用 GitHub Enterprise,您可以使用类似--additional-github-domain github.example.com
check-xml
尝试加载所有 xml 文件以验证语法。
check-yaml
尝试加载所有 yaml 文件以验证语法。
--allow-multiple-documents- 允许使用 多文档语法--unsafe- 不加载文件,仅解析其语法。 仅进行语法检查会启用扩展和通常被禁止的不安全构造。 使用此选项将移除对所有其他 yaml 实现的可移植性保证。 隐含--allow-multiple-documents。
debug-statements
检查 python 源代码中的调试器导入和 py37+ breakpoint() 调用。
destroyed-symlinks
检测被更改为包含该符号链接所指向路径内容的常规文件的符号链接。 这通常发生在 Windows 上,当用户克隆一个包含符号链接的仓库, 但他们没有创建符号链接的权限时。
detect-aws-credentials
检查您通过 AWS CLI 设置的 AWS 密钥是否存在。 以下参数可用:
--credentials-file CREDENTIALS_FILE- 位于非标准位置的额外 AWS CLI 风格 配置文件,用于获取已配置的凭据。可以多次重复使用。--allow-missing-credentials- 允许在未检测到凭据时钩子通过。
detect-private-key
检查是否存在私钥。
double-quote-string-fixer
此钩子将双引号字符串替换为单引号字符串。
end-of-file-fixer
确保文件以换行符结尾,且仅以一个换行符结尾。
file-contents-sorter
对指定文件中的行进行排序(默认按字母顺序)。
必须提供目标 files 作为输入。
请注意,此钩子将删除空行,并且不尊重任何注释。
所有换行符都将转换为换行符(\n)。
以下参数可用:
--ignore-case- 将小写字母折叠为大写字母。--unique- 确保每行都是唯一的。
fix-byte-order-marker
移除 UTF-8 字节顺序标记
forbid-new-submodules
防止添加新的 git 子模块。
这旨在作为从子模块迁移的辅助工具。 如果您想完全禁止它们,请使用 forbid-submodules
forbid-submodules
禁止仓库中存在任何子模块。
mixed-line-ending
替换或检查混合的行尾符。
--fix={auto,crlf,lf,no}auto- 自动替换为最常见的行尾符。这是默认参数。crlf,lf- 强制将行尾符分别替换为 CRLF 和 LF。- 此选项与 git 设置 check-in LF check-out CRLF 不兼容,因为 git 在钩子调用之后才进行 smudge 处理。
no- 检查是否存在混合的行尾符,而不修改任何文件。
name-tests-test
验证测试文件是否命名正确。
--pytest(默认): 确保测试匹配.*_test\.py--pytest-test-first: 确保测试匹配test_.*\.py--django/--unittest: 确保测试匹配test.*\.py
no-commit-to-branch
保护特定分支免受直接签入。
- 使用
args: [--branch, staging, --branch, main]设置分支。 如果未设置分支参数,main和master默认均受保护。 -b/--branch可以多次指定以保护多个 分支。-p/--pattern可用于保护匹配所提供正则表达式的分支 (例如--pattern, release/.*)。可以多次指定。
注意,no-commit-to-branch 默认配置为 always_run。
因此,它将忽略 files、
exclude、types
或 exclude_types 的任何设置。
设置 always_run: false 以允许根据这些
文件过滤器跳过此钩子。注意:在此配置下,空提交(git commit --allow-empty)将始终被此钩子允许。
pretty-format-json
检查所有 JSON 文件是否格式美观。“美观” 在此处意味着键已排序并缩进。您可以使用 以下命令行选项进行配置:
--autofix- 自动格式化 json 文件--indent ...- 控制缩进(数字表示空格数,或空白字符串)。默认为 2 个空格。--no-ensure-ascii保留 Unicode 字符,而不是转换为转义序列--no-sort-keys- 自动修复时,保留原始键顺序(而不是对键进行排序)--top-keys comma,separated,keys- 保留在映射顶部的键。
requirements-txt-fixer
对 requirements.txt 和 constraints.txt 中的条目进行排序,并移除 pkg-resources==0.0.0 的错误条目
sort-simple-yaml
对仅由顶层 键组成的简单 YAML 文件进行排序,保留注释和块。
请注意,sort-simple-yaml 默认不匹配任何 files,因为它强制要求一种
非常特定的格式。 您必须通过设置 files 来启用此功能,例如:
- id: sort-simple-yaml
files: ^config/simple/
trailing-whitespace
修剪行尾空白。
- 若要保留 Markdown 硬换行
请使用
args: [--markdown-linebreak-ext=md](或您的 markdown 文件 中使用的其他扩展)。如果出于某种原因您希望将所有文件 视为 markdown,请使用--markdown-linebreak-ext=*。 - 默认情况下,此钩子会修剪行首和行尾的所有空白。
若要指定要修剪的自定义字符集,请使用
args: [--chars,"<chars to trim>"]。
已弃用 / 已替换的钩子
check-byte-order-marker:请改用 fix-byte-order-markerfix-encoding-pragma:请改用pyupgradecheck-docstring-first:存在根本性缺陷,已弃用且无替代方案。
作为独立包
如果您想使用这些钩子,它们也可作为独立包使用。
只需 pip install pre-commit-hooks