文章目录
- # 通过 pip 安装(推荐) pip install pre-commit # 或使用 Homebrew(macOS) brew install pre-commit
- # 进入项目根目录 cd your-project # 安装 Git 钩子脚本 pre-commit install # 生成 .git/hooks/pre-commit
- 创建配置文件,示例: repos: # 官方通用钩子库 – repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.0.1 # 版本号 hooks: – id: trailing-whitespace # 删除行尾空格 – id: check-yaml # 验证 YAML 语法 – id: end-of-file-fixer # 确保文件以换行符结尾 # Python 代码格式化 – repo: https://github.com/psf/black rev: 23.3.0 hooks: – id: black args: [–line-length=88] # 参数:每行最大长度 # Python 导入排序 – repo: https://github.com/PyCQA/isort rev: 5.12.0 hooks: – id: isort 💡 配置说明: repo:钩子工具所在的 Git 仓库 URL。 rev:工具版本(Git Tag 或 Commit SHA)。 hooks:具体钩子列表,id 为工具标识。
- 支持本地脚本或私有仓库的钩子: repos: – repo: local # 本地钩子 hooks: – id: custom-check name: “My Custom Script” entry: ./scripts/custom-check.sh # 脚本路径 language: system # 直接执行系统命令
- 仅对特定文件运行钩子: hooks: – id: black types: [python] # 仅处理 Python 文件 – id: eslint files: .(js|ts)$ # 正则匹配 JS/TS 文件
- 临时绕过 pre-commit(慎用): git commit –no-verify # 跳过钩子执行
目录
- 🛠️ 一、pre-commit 是什么?
- 核心价值
- ⚙️ 二、工作原理
- 📦 三、安装与初始化
- 1. 安装 pre-commit
- 2. 项目初始化
- 3. 配置文件(.pre-commit-config.yaml)
- 🔧 四、常用命令
- 🚀 五、进阶用法
- 1. 自定义钩子
- 2. 按文件类型过滤
- 3. 跳过检查
- ⚠️ 六、常见问题解决
- 💎 七、最佳实践
- 🧩 八、生态工具推荐
pre-commit 是一个 Git 预提交钩子管理框架,用于在代码提交(git commit)前自动执行代码检查、格式化、静态分析等任务。它通过配置文件定义一系列检查规则(称为“钩子”),确保代码符合项目规范,减少人工审查成本。
- 自动化代码质量检查:如代码风格(flake8、black)、语法错误、安全漏洞等。
- 统一团队规范:强制所有成员遵守相同的代码标准。
- 减少低级错误:拦截未格式化、含调试语句或语法错误的提交。
- 触发时机:当运行
git commit 时,Git 自动调用 .git/hooks/pre-commit 脚本。
- 执行流程:
- 读取项目根目录的
.pre-commit-config.yaml 配置文件。
- 按配置下载并运行指定的钩子工具(如 flake8、black)。
- 若所有钩子通过,提交继续;若失败,提交中止并提示错误。
git commit 时,Git 自动调用 .git/hooks/pre-commit 脚本。- 读取项目根目录的
.pre-commit-config.yaml配置文件。 - 按配置下载并运行指定的钩子工具(如 flake8、black)。
- 若所有钩子通过,提交继续;若失败,提交中止并提示错误。
# 通过 pip 安装(推荐)
pip install pre-commit
# 或使用 Homebrew(macOS)
brew install pre-commit
# 进入项目根目录
cd your-project
# 安装 Git 钩子脚本
pre-commit install # 生成 .git/hooks/pre-commit
创建配置文件,示例:
repos:
# 官方通用钩子库
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1 # 版本号
hooks:
- id: trailing-whitespace # 删除行尾空格
- id: check-yaml # 验证 YAML 语法
- id: end-of-file-fixer # 确保文件以换行符结尾
# Python 代码格式化
- repo: https://github.com/psf/black
rev: 23.3.0
hooks:
- id: black
args: [--line-length=88] # 参数:每行最大长度
# Python 导入排序
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
hooks:
- id: isort
💡 配置说明:
repo:钩子工具所在的 Git 仓库 URL。rev:工具版本(Git Tag 或 Commit SHA)。hooks:具体钩子列表,id为工具标识。
| 命令 | 作用 |
|---|---|
| pre-commit install | 安装 Git 钩子到当前项目 |
| pre-commit run | 手动运行所有钩子(针对暂存区文件) |
| pre-commit run –all-files | 首次全量检查所有文件 |
| pre-commit autoupdate | 自动更新钩子工具到最新版本 |
| pre-commit uninstall | 卸载 Git 钩子 |
支持本地脚本或私有仓库的钩子:
repos:
- repo: local # 本地钩子
hooks:
- id: custom-check
name: "My Custom Script"
entry: ./scripts/custom-check.sh # 脚本路径
language: system # 直接执行系统命令
仅对特定文件运行钩子:
hooks:
- id: black
types: [python] # 仅处理 Python 文件
- id: eslint
files: .(js|ts)$ # 正则匹配 JS/TS 文件
临时绕过 pre-commit(慎用):
git commit --no-verify # 跳过钩子执行
-
钩子执行失败
- 根据终端错误提示修复代码(如 flake8 报错)。
- 重新
git add 修改后的文件并再次提交。
-
首次全量检查报错
使用 pre-commit run --all-files 提前修复存量代码,避免首次提交阻塞。
-
跨平台兼容性问题
确保钩子工具(如 shell 脚本)在 Windows/macOS/Linux 均可运行。
钩子执行失败
- 根据终端错误提示修复代码(如 flake8 报错)。
- 重新
git add修改后的文件并再次提交。
首次全量检查报错
使用 pre-commit run --all-files 提前修复存量代码,避免首次提交阻塞。
跨平台兼容性问题
确保钩子工具(如 shell 脚本)在 Windows/macOS/Linux 均可运行。
- 团队统一配置
将 .pre-commit-config.yaml 加入版本控制,确保所有成员使用相同规则。
- 结合 CI/CD
在 CI 流水线中运行 pre-commit,双重保障代码质量。
- 定期更新工具
运行 pre-commit autoupdate 更新钩子到最新版本。
将
.pre-commit-config.yaml 加入版本控制,确保所有成员使用相同规则。在 CI 流水线中运行
pre-commit,双重保障代码质量。运行
pre-commit autoupdate 更新钩子到最新版本。
| 工具 | 作用 | 语言 |
|---|---|---|
| flake8 | Python 代码静态检查 | Python |
| black | Python 代码自动格式化 | Python |
| isort | Python 导入排序 | Python |
| eslint | JavaScript 代码检查 | JS/TS |
| prettier | 多语言代码格式化 | 通用 |
配置示例:
- repo: https://github.com/pre-commit/mirrors-eslint
rev: v8.0.0
hooks:
- id: eslint
args: [--fix] # 自动修复问题
通过 pre-commit,开发者可以低成本实现代码质量的自动化管控,尤其适合团队协作项目。建议从基础钩子(如空格检查、YAML 验证)开始,逐步引入格式化工具(如 black、prettier),最终形成完整的代码守护流水线。
到此这篇关于Python中pre-commit的具体使用的文章就介绍到这了,更多相关Python pre-commit内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Python的高级Git库 Gittle
- 如何使用python代码操作git代码
- Python实现一个Git日志统计分析的小工具
- Python脚本化Git的操作详解
- 如何利用Python模拟GitHub登录详解