Git 集成实战完全指南(七):Git 钩子自动化

Git 集成实战完全指南(七):Git 钩子自动化 title: Git 集成实战完全指南七Git 钩子自动化——pre-commit、pre-push 自动执行date: 2026-07-10category: 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-commitEOF #!/bin/bash echo 运行 Lint 检查... cd frontend pnpm exec eslint src/ --max-warnings0 EOFchmodx .git/hooks/pre-commit缺点每个开发者都要手动配置不随项目版本管理。1.2 项目级 Hook推荐使用 Husky 或 lint-staged 管理 Hook# 前端项目使用 Huskycdfrontend npx husky-initnpminstallnpx huskyadd.husky/pre-commitnpx lint-staged1.3 Claude Code 管理的 HookClaude Code 可以直接读写 Hook 文件并通过 Skill 自动化配置。二、常用 Hook 配置2.1 pre-commit Hook帮我配置 pre-commit Hook提交前自动 LintClaude 生成 Hook 配置# 创建 .husky/pre-commitmkdir-p.huskycat.husky/pre-commitHOOK #!/bin/sh .npmpkg/husky/init.sh # 前端 Lint cd frontend npx lint-staged # 后端 Checkstyle cd asset-server mvn checkstyle:check -q HOOKchmodx .husky/pre-commit同时生成lint-staged.config.jsmodule.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-msgHOOK #!/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 HOOKchmodx .husky/commit-msg2.3 pre-push Hook配置 pre-push Hook推送前运行测试Claude 生成cat.husky/pre-pushHOOK #!/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 ✅ 所有检查通过开始推送... HOOKchmodx .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. 检测项目类型lsfrontend/package.json asset-server/pom.xml2/dev/null# 2. 安装 Husky前端cdfrontend npx husky-init2/dev/null||echoHusky already installed# 3. 生成所有 Hookmkdir-p.husky# pre-commitcat.husky/pre-commitEOF #!/bin/sh cd frontend npx lint-staged cd ../asset-server mvn checkstyle:check -q EOF# commit-msgcat.husky/commit-msgEOF #!/bin/sh # Conventional Commits 检查 ... EOF# pre-pushcat.husky/pre-pushEOF #!/bin/sh # 测试 安全检查 ... EOFchmodx .husky/*.sh# 4. 验证echo✅ Git Hook 配置完成echo pre-commit: Lint Checkstyleecho commit-msg: 约定式提交检查echo pre-push: 测试 分支保护四、Hook 的测试与调试4.1 测试 Hook测试一下 pre-commit Hook 是否生效Claude 执行# 修改一个文件但不提交echo// testsrc/test.ts# 手动触发 pre-commit./.husky/pre-commit4.2 临时禁用 Hook先别跑 Hook我急着提交Claude 执行# 使用 --no-verify 跳过 Hookgitcommit --no-verify-mtemp: 紧急修复⚠️ 提醒跳过 Hook 有风险建议仅在紧急情况下使用。4.3 Hook 失败时查看日志pre-commit 失败了看看什么原因Claude 执行# 查看 Hook 脚本的输出了cat.git/logs/hooks/pre-commit2/dev/null||\echoHook 输出已在终端显示请检查上面的错误信息五、Post-Merge Hook5.1 自动安装依赖merge 之后自动安装依赖Claude 生成cat.husky/post-mergeEOF #!/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 EOF5.2 自动执行数据库迁移merge 后自动运行数据库迁移脚本cat.husky/post-mergeEOF #!/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 防止烂代码上远程——测试不通过就不让 pushpost-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 流程待写