Tip

前置知识:

  • 基本的命令行操作
  • Git 基础知识

Pre-commit 是一个用来在提交之前进行格式审查的工具。在本地完成开发/编写后,通常需要检查样式/格式化/测试等,pre-commit 就是一个自动执行上述步骤,提高效率的工具。本文介绍如何配置和使用 Pre-commit 工具来自动化代码审查流程。

安装

pip install pre-commit
pre-commit -V # 查看版本信息

Note

输出版本信息即为安装成功

配置

在项目目录下新增一个文件 .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: v2.4.0
    hooks:
    -   id: check-xml
    -   id: check-added-large-files
    -   id: check-byte-order-marker
-   repo: https://github.com/PyCQA/flake8
    rev: '3.7.9'
    hooks:
    -   id: flake8
-   repo: https://github.com/codespell-project/codespell
    rev: v1.16.0
    hooks:
    -   id: codespell

Tip

上述配置内容仅为示例,实际根据自身需求填入内容

然后执行以下命令:

pre-commit install

Note

没有报错就是安装成功了

第一次使用时可以先使用 pre-commit run --all-files 对所有文件进行一次审查,后续在 commit 时会自动进行检查。

此外,在 .pre-commit-config.yaml 配置文件中,必须为每个存储库指定版本。Pre-commit 提供了自动更新命令:

pre-commit autoupdate

常用 hook 介绍

Tip

Hook 可以分为通用类和语言特定类两种:

以下是一些常用的 hook:

  • 通用类:

    • check-added-large-files: 提交前阻止增加大文件(默认 500kb)
    • check-xml: 加载 xml 文件并检查语法
    • check-case-conflict: 检查是否因大小写造成文件冲突
    • check-merge-confilct: 查找并报告 git 合并冲突
    • mixed-line-ending: 检查并修复文件的行尾结束符
    • detect-private-key: 检查是否有私钥被提交
  • Python 相关:

    • flake8: 对 python 代码进行风格检查和错误检查
    • mypy: python 的静态类型检查器
    • docstring: python 中的文档字符串检查

相关材料