13.3 【代码提交】pre-commit hook¶
代码规范、测试是开发中很重要的一环,重要性无需我多说。我们需要一些自动化工具,来帮助我们更轻松地管理项目。本文推荐几个实用的自动化工具。
pre-commit 我在之前的一篇文章 推荐一些维护大型 Python 项目的工具中简要提到过,这里再稍微讲一下。
pre-commit
用到一个配置文件:.pre-commit-config.yaml
,官方文档在这里。这里针对
Python 项目,希望 git precommit hooks 能够实现以下功能:能找出不符合
pep8规范的代码,并且能够自动格式化。这需要用到两个工具:black
和flake8
,black
自动格式化,flake8
检测代码不规范的地方。
整个的 workflow 如下图所示:

具体的执行步骤如下:
安装 pre-commit :
pip install pre-commit
写
.pre-commit-config.yaml
配置文件用
pre-commit install
安装git hooks到你的.git/
目录
我们的.pre-commit-config.yaml
很简单,如下:
repos:
- repo: https://github.com/ambv/black
rev: stable
hooks:
- id: black
language_version: python3.7
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v1.2.3
hooks:
- id: flake8
然后我们下一次提交 commit
的时候,会先运行black
和flake8
,检查出哪有不规范的地方,并且能自动帮你格式化。你修改之后重新提交
commit,就能顺利提交了。
实际操作一下:
新建一个测试文件:bad_pep8.py
:

有好几处不符合 pep8规范,我们试着 commit 一下:

可以看到两个 hook 都没有通过,另外 black
帮我们把代码格式化了。

同时flake8
提示我们x
变量定义了但是没有使用,把这一行删掉,然后重新add
并 commit:

如果你觉得没有必要强制要求不能定义变量而不使用(从输出可以看出这个规范的编号为F841),可以在项目根目录建一个.flake8
配置文件,如下图。更加详细的配置请看官方文档。
[flake8]
ignore = F841