在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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律