Git Hooks 与预提交:让代码检查自动化
2026/7/3 11:40:49
网站开发
本文是《Python工程化实践》专栏第十五章,讲解如何使用 pre-commit 框架自动化代码检查,确保每次提交都符合团队标准。1. Git Hooks 简介1.1 什么是 Git HooksGit Hooks 是 Git 在特定事件发生前后自动运行的脚本:┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ git commit │ ──► │ pre-commit │ ──► │ commit │ └─────────────┘ │ hook │ │ happens │ └─────────────┘ └─────────────┘1.2 客户端 vs 服务端钩子类型名称说明客户端pre-commit提交前运行客户端prepare-commit-msg提交信息编辑前客户端commit-msg提交信息编辑后客户端post-commit提交后服务端pre-receive推送前(服务器)服务端post-receive推送后(服务器)1.3 手动使用 Git Hooks# 创建 pre-commit 钩子mkdir-p.git/hookscat.git/hooks/pre-commit'EOF' #!/bin/bash echo "Running pre-commit checks..." ruff check . EOFchmod+x .git/hooks/pre-commit问题:手动创建的钩子不会被提交到 Git,团队成员每人都要手动创建。2. pre-commit 框架2.1 安装pipinstallpre-commitpre-commit--version# pre-commit 3.5.02.2 初始化pre-commitinstall# pre-commit installed at .git/hooks/pre-commit这会自动在.git/hooks/创建pre-commit钩子,并链接到 pre-commit 框架。2.3 创建配置文件# .pre-commit-config.yamlrepos:-repo:https://github.com/pre-commit/pre-commit-hooksrev:v4.5.0hooks:-id:trailing-whitespace-id:end-of-file-fixer-id:check-yaml-id:check-added-large-filesargs:['--maxkb=1000']2.4 运行检查# 运行所有钩子pre-commit run --all-files# 运行特定钩子pre-commit run trailing-whitespace# 手动触发(不通过 Git 事件)pre-commit run-a3. 常用钩子实战3.1 ruff 代码检查ruff 是 Python 最快的代码检查工具: