登录 视频地址: BV1kV411V7Pn
使用 pre-commit 对 Python 代码校验
一个人写代码的时候,想怎么写就怎么写,能够实现功能就可以了。但是在团队合作的时候,如果不对 git 提交的代码进行校验、风格统一,因为团队成员的水平不一,很容易就出现一些地方空行太多、命名格式不规范等等问题,合作也会直线效率下降。
这种低级的问题应该在提交到远程仓库之前就被解决。git 就提供了 git hooks 专门来处理这些问题,其中 Python 的解决方案是 pre-commit。
pre-commit 介绍
pre-commit 是用 python 开发的一个功能,能够在 git commit 提交代码之前对将要提交的内容进行校验,如果不符合规范将会打回。在项目中使用 pre-commit 有以下好处
- 自动化检查代码排版规范,快速而且有效率(例如 black、isort)
- 低级的问题不会进入到 code review 阶段
- 多一点时间检查代码逻辑,而不是排查基本的错误(例如空格、换行之类的问题)
- 大大提升排查不符合规范代码的效率
创建项目
使用 pre-commit 之前需要初始化一个 git 项目。
pycharm 创建 flask 项目
poetry init
poetry add flask初始化 git 项目
git init
touch .gitignore添加忽略文件
.idea
*.py[cod]
*.log添加代码校验依赖
poetry add black --group dev
poetry add isort --group dev
poetry shellpre-commit 基础使用
安装 pre-commit
poetry add pre-commit --group dev安装好了之后可以查看版本
$ pre-commit --version
pre-commit 3.3.3添加预提交校验配置
- 创建一个
.pre-commit-config.yaml文件 - 可以使用
pre-commit sample-config指令生成基本的配置文件 - 这个示例使用来格式化 python 代码,但是
pre-commit适用于任何编程语言 - 也支持其他的 git hooks
运行 pre-commit sample-config 可以生成基本的配置,然后将其复制到 .pre-commit-config.yaml 当中。
$ pre-commit sample-config
# 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安装 git 钩子脚本
运行pre-commit install设置 git hook 脚本
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit安装 git hook 之后,当在运行 pre-commit 提交时,将自动校验 pre-commit 的规则。
对所有文件进行校验(可选)
使用 git add . 先追踪待提交内容,然后运行
pre-commit run --all-files校验待提交内容,校验失败之后,一部分内容 pre-commit 会自动调整,然后运行 git add . 、pre-commit run --all-files 。也有可能有一些校验不通过,需要手动进行调整。
注意:
pre-commit 只针对需要 git 追踪的内容进行校验
添加其他 git hooks
https://pre-commit.com/hooks.html
pre-commit 有那些钩子,可以在官方文档上看到。我比较推荐 isort、black、mirrors-prettier 这三个钩子。前两个是校验 python 代码,后一个是格式化前端代码。
repos:
- repo: https://github.com/commitizen-tools/commitizen
rev: 3.5.3
hooks:
- id: commitizen
stages: [commit-msg]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- id: check-toml
- repo: https://github.com/psf/black
rev: 23.7.0
hooks:
- id: black
- repo: https://github.com/pre-commit/mirrors-prettier
rev: "v3.0.0" # Use the sha / tag you want to point at
hooks:
- id: prettier使用 prettier 格式化前端代码,需要修改 pycharm 对前端代码默认的格式化方式,可以在 https://www.jetbrains.com/help/pycharm/2020.2/prettier.html 看到。