Git 集成实战完全指南(七):Git 钩子自动化
·
title: Git 集成实战完全指南(七)Git 钩子自动化——pre-commit、pre-push 自动执行
date: 2026-07-10
category: AI 开发工具
tags: [Claude Code, Git, Hook, 自动化, pre-commit, pre-push]
Git 集成实战完全指南(七):Git 钩子自动化
在代码提交前自动检查规范、运行测试、生成文档——Git Hook 就是你的自动守门员。本篇教你用 Claude Code 配置和自动化 Git 钩子。
前言
Git Hook 是在 Git 操作的不同阶段自动触发的脚本。常见的钩子:
pre-commit → 提交前执行(代码检查、格式校验)
prepare-commit-msg → 生成提交信息前执行
commit-msg → 提交信息确认后执行(检查格式)
post-commit → 提交后执行(通知、备份)
pre-push → 推送前执行(运行测试、检查分支)
pre-receive → 服务端接收推送前执行
传统上,Hook 是 shell 脚本。但用 Claude Code,你可以用自然语言生成和维护这些 Hook。
一、Hook 的配置方式
1.1 本地 Hook(.git/hooks/)
# 在 .git/hooks/ 下创建脚本
# pre-commit 示例
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/bash
echo "运行 Lint 检查..."
cd frontend && pnpm exec eslint src/ --max-warnings=0
EOF
chmod +x .git/hooks/pre-commit
缺点:每个开发者都要手动配置,不随项目版本管理。
1.2 项目级 Hook(推荐)
使用 Husky 或 lint-staged 管理 Hook:
# 前端项目使用 Husky
cd frontend
npx husky-init && npm install
npx husky add .husky/pre-commit "npx lint-staged"
1.3 Claude Code 管理的 Hook
Claude Code 可以直接读写 Hook 文件,并通过 Skill 自动化配置。
二、常用 Hook 配置
2.1 pre-commit Hook
帮我配置 pre-commit Hook,提交前自动 Lint
Claude 生成 Hook 配置:
# 创建 .husky/pre-commit
mkdir -p .husky
cat > .husky/pre-commit << 'HOOK'
#!/bin/sh
.npmpkg/husky/init.sh
# 前端 Lint
cd frontend && npx lint-staged
# 后端 Checkstyle
cd asset-server && mvn checkstyle:check -q
HOOK
chmod +x .husky/pre-commit
同时生成 lint-staged.config.js:
module.exports = {
'src/**/*.{vue,ts,js}': ['eslint --fix', 'prettier --write'],
'src/**/*.vue': ['stylelint --fix'],
'src/**/*.{json,css}': ['prettier --write'],
}
2.2 commit-msg Hook
配置 commit-msg Hook,强制使用约定式提交
Claude 生成:
cat > .husky/commit-msg << 'HOOK'
#!/bin/sh
COMMIT_MSG=$(cat .git/COMMIT_EDITMSG)
# 检查是否符合 Conventional Commits 格式
if ! echo "$COMMIT_MSG" | grep -qE '^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .+'; then
echo "❌ 提交信息不符合约定式提交格式"
echo ""
echo "正确格式:<type>(<scope>): <subject>"
echo "示例:feat(user): 新增用户搜索功能"
echo ""
echo "type 可选值:feat, fix, docs, style, refactor, test, chore"
exit 1
fi
HOOK
chmod +x .husky/commit-msg
2.3 pre-push Hook
配置 pre-push Hook,推送前运行测试
Claude 生成:
cat > .husky/pre-push << 'HOOK'
#!/bin/sh
echo "🚀 pre-push 检查..."
# 1. 检查是否在 main 分支直接推送
BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$BRANCH" = "main" ]; then
echo "❌ 不允许直接向 main 分支推送代码"
echo "请使用 Pull Request 流程"
exit 1
fi
# 2. 运行前端测试
cd frontend
if ! pnpm test -- --run; then
echo "❌ 前端测试失败,推送中止"
exit 1
fi
# 3. 运行后端测试
cd ../asset-server
if ! mvn test -q; then
echo "❌ 后端测试失败,推送中止"
exit 1
fi
echo "✅ 所有检查通过,开始推送..."
HOOK
chmod +x .husky/pre-push
三、Hook 的自动化管理
3.1 用 Skill 管理 Hook
---
name: hook-manager
description: 管理和生成 Git Hook 配置
trigger: Hook, husky, pre-commit, pre-push, 钩子
---
# Git Hook 管理 Skill
## 角色定义
你是一个 Git Hook 配置专家。
## 支持的 Hook
| Hook | 触发时机 | 典型用途 |
|------|---------|---------|
| pre-commit | git commit 前 | Lint、格式检查 |
| commit-msg | commit msg 确认后 | 提交信息格式检查 |
| pre-push | git push 前 | 测试、安全检查 |
| post-commit | commit 后 | 通知、日志记录 |
| post-merge | merge 后 | 依赖安装、数据库迁移 |
## 常用配置模板
### 前端项目(Vue/React)
- pre-commit: eslint --fix + prettier
- commit-msg: conventional commits 检查
- pre-push: pnpm test + pnpm build
### 后端项目(Java/Spring Boot)
- pre-commit: checkstyle 检查
- pre-push: mvn test
### 全栈项目
- 分别对 frontend/ 和 backend/ 配置不同的 Hook
## 安装流程
1. 检测项目是否已安装 Husky
2. 如果没有,执行 npx husky-init
3. 生成对应的 Hook 脚本
4. 设置可执行权限
5. 测试 Hook 是否生效
3.2 一键安装所有 Hook
帮我把项目所有的 Git Hook 都配好
Claude 执行:
# 1. 检测项目类型
ls frontend/package.json asset-server/pom.xml 2>/dev/null
# 2. 安装 Husky(前端)
cd frontend
npx husky-init 2>/dev/null || echo "Husky already installed"
# 3. 生成所有 Hook
mkdir -p .husky
# pre-commit
cat > .husky/pre-commit << 'EOF'
#!/bin/sh
cd frontend && npx lint-staged
cd ../asset-server && mvn checkstyle:check -q
EOF
# commit-msg
cat > .husky/commit-msg << 'EOF'
#!/bin/sh
# Conventional Commits 检查
...
EOF
# pre-push
cat > .husky/pre-push << 'EOF'
#!/bin/sh
# 测试 + 安全检查
...
EOF
chmod +x .husky/*.sh
# 4. 验证
echo "✅ Git Hook 配置完成"
echo " pre-commit: Lint + Checkstyle"
echo " commit-msg: 约定式提交检查"
echo " pre-push: 测试 + 分支保护"
四、Hook 的测试与调试
4.1 测试 Hook
测试一下 pre-commit Hook 是否生效
Claude 执行:
# 修改一个文件但不提交
echo "// test" >> src/test.ts
# 手动触发 pre-commit
./.husky/pre-commit
4.2 临时禁用 Hook
先别跑 Hook,我急着提交
Claude 执行:
# 使用 --no-verify 跳过 Hook
git commit --no-verify -m "temp: 紧急修复"
⚠️ 提醒:跳过 Hook 有风险,建议仅在紧急情况下使用。
4.3 Hook 失败时查看日志
pre-commit 失败了,看看什么原因
Claude 执行:
# 查看 Hook 脚本的输出了
cat .git/logs/hooks/pre-commit 2>/dev/null || \
echo "Hook 输出已在终端显示,请检查上面的错误信息"
五、Post-Merge Hook
5.1 自动安装依赖
merge 之后自动安装依赖
Claude 生成:
cat > .husky/post-merge << 'EOF'
#!/bin/sh
# 检测 package.json 是否变化
if git diff HEAD^1 HEAD --name-only | grep -q "package.json"; then
echo "📦 package.json 有变更,安装依赖..."
pnpm install
fi
# 检测 pom.xml 是否变化
if git diff HEAD^1 HEAD --name-only | grep -q "pom.xml"; then
echo "📦 pom.xml 有变更,清理 Maven 缓存..."
cd asset-server && mvn dependency:resolve -q
fi
EOF
5.2 自动执行数据库迁移
merge 后自动运行数据库迁移脚本
cat > .husky/post-merge << 'EOF'
#!/bin/sh
# 检查是否有新的迁移脚本
NEW_MIGRATIONS=$(git diff HEAD^1 HEAD --name-only -- migrations/ | wc -l)
if [ "$NEW_MIGRATIONS" -gt 0 ]; then
echo "📦 发现 $NEW_MIGRATIONS 个新的数据库迁移脚本"
echo "是否执行数据库迁移?(y/N)"
read -r answer
if [ "$answer" = "y" ]; then
flyway migrate
fi
fi
EOF
六、这一章的核心心得
- Hook 是代码质量的守门员——在提交前拦截问题,比提交后发现成本低 10 倍
- Husky 是前端 Hook 的标准——配合 lint-staged 只检查暂存的文件,速度快
- commit-msg Hook 保证提交规范——约定式提交让 git log 可读
- pre-push Hook 防止烂代码上远程——测试不通过就不让 push
- post-merge Hook 自动化收尾工作——安装依赖、执行迁移
- Hook 可以临时跳过——
--no-verify紧急提交,但要慎用
七、下一步
Hook 配置好了,Git 操作也自动化了。最后一篇,我们学习 Git 的团队协作最佳实践——PR Review 流程、Code Review 规范、多人协作的 Git 策略。
系列目录:
Claude Code 与 Git 的基础集成——自然语言操作 Git智能分支管理——分支策略、自动创建、合并预防自动化 Commit 与 PR——生成提交信息、创建 Pull RequestGit 冲突解决——合并冲突的自动检测与修复Git Blame 与历史追踪——追溯代码变更的来龙去脉Git 标签与版本管理——Release 流程自动化Git 钩子自动化——pre-commit、pre-push 自动执行← 本篇- Git 团队协作最佳实践——PR Review、Code Review 流程(待写)
更多推荐

所有评论(0)