简介

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是钩子仓库。
  • hooksid是检查工具的名称。

安装钩子

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

参考