简介
pre-commit 钩子在键入提交信息前运行。 它用于检查即将提交的快照,例如,检查是否有所遗漏,确保测试运行,以及核查代码。
安装 pre-commit
可以用pip
安装 pre-commit。
pip install pre-commit
新建配置文件
在项目目录,通过pre-commit
命令,创建.pre-commit-config.yaml
配置文件。
pre-commit sample-config > .pre-commit-config.yaml
配置文件示例:
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
repo
是钩子仓库。hooks
里id
是检查工具的名称。
安装钩子
pre-commit install
检查全部文件
pre-commit run --all-files
提交时运行
运行示例:
Trim Trailing Whitespace.................................................Passed
Fix End of Files.........................................................Passed
Check Yaml...............................................................Passed
Check for added large files..............................................Passed
如果测试失败会阻止 Git 提交。
C++项目使用示例
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
# 空白处理
- id: trailing-whitespace
# 排除目录,排除多个目录时,需要使用正则匹配
exclude: lib/
# 文件尾空行
- id: end-of-file-fixer
exclude: lib/
# 检查yaml
- id: check-yaml
exclude: lib/
# 检查大文件
- id: check-added-large-files
exclude: lib/
# C++钩子
- repo: https://github.com/pocc/pre-commit-hooks
rev: v1.3.5
hooks:
# 格式化
- id: clang-format
args: [-style=file, -i]
exclude: lib/
# 静态检查
- id: clang-tidy
args: [-p=build/]
exclude: lib/
推荐的钩子仓库
检查拼写错误
---
- repo: https://github.com/crate-ci/typos
rev: v1.8.1
hooks:
- id: typos
exclude: static/
可以通过编写_typos.toml
,添加停用词,跳过拼写检查。
示例:
[default.extend-words]
fo = "fo"
跳过检查fo
这个词。
格式化
---
- repo: https://github.com/psf/black
rev: 22.10.0
hooks:
- id: black