在Git中使用pre-commit
前言
git-hooks 脚本对于在提交代码审查之前识别简单问题很有用。我们在每次提交时都运行钩子,以自动指出代码中的问题,例如缺少分号,尾随空白和调试语句。通过在代码审阅之前指出这些问题,代码审阅者可以专注于更改的体系结构,而不会浪费琐碎的样式问题。我们建立了预提交来解决钩子问题。它是用于预提交挂钩的多语言包管理器。您可以指定所需的挂钩列表,并且在每次提交之前,预提交可以管理用任何语言编写的任何挂钩的安装和执行。 pre-commit是专门为不需要root访问而设计的。如果您的开发人员之一未安装节点,但修改了JavaScript文件,则预提交会自动处理下载和构建节点,以在没有root的情况下运行eslint。
在此介绍的pre-commit只是git hook的一部分, git hook分客户端和服务端的,pre-commit属于客户端的。
pre-commit是一段在git-hooks的任意阶段执行的代码,可以设置在git-hook的任意阶段执行。具体在那个阶段执行详见 stages 配置。
安装
在系统中安装
brew install pre-commit
# 或者
pip install pre-commit
# 查看版本
pre-commit --version
# pre-commit 2.12.1 <- 这是我当前使用的版本
在项目中安装
cd <git-repo>
#安装
pre-commit install
# 卸载
pre-commit uninstall
按照操作将会在项目的.git/hooks下生成一个pre-commit文件(覆盖原pre-commit文件),该hook会根据项目根目录下的.pre-commit-config.yaml 执行任务。
配置pre-commit
其实就是修改项目根目录下的.pre-commit-config.yaml文件,可选配置项如:
| key | 含义 |
| id | 钩子的 id - 在 pre-commit-config.yaml 中使用。 |
| name | 钩子的名称 - 在钩子执行期间显示。 |
| entry |
入口点 - 要运行的可执行文件。 |
| language |
钩子的语言 - 告诉预提交如何安装钩子。 |
| files | (可选:默认'')要运行的文件模式。 |
exclude |
(可选:默认 |
|
|
(可选:默认 |
|
|
(可选:默认 |
|
|
(可选:默认 |
|
|
(可选:默认 |
|
|
(可选:默认 |
|
|
(可选)如果 |
|
|
(可选:默认 |
|
|
(可选:默认 |
|
|
(可选:默认 |
|
|
(可选:默认 |
|
|
(可选:默认 |
|
|
(可选:默认 |
|
|
(可选:默认(所有阶段))将钩子限制在 |
样例配置文件
demo配置
pre-commit-config.yaml
repos:
- repo: https://github.com/psf/black
rev: 20.8b1
hooks:
- id: black
args: [--line-length=79]
- repo: https://github.com/pycqa/isort
rev: 5.8.0
hooks:
- id: isort
name: isort (python)
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.2.3
hooks:
- id: debug-statements
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.2.3
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-mypy
rev: 'v0.790' # Use the sha / tag you want to point at
hooks:
- id: mypy
args:
- --follow-imports=silent
- --ignore-missing-imports
- --show-column-numbers

浙公网安备 33010602011771号