用途:在 Git 层面自动化代码质量门禁,让 pre-commit、commit-msg、pre-push 等钩子在提交与推送前执行 lint、格式化、类型检查和测试,尽快发现问题。适用于搭建钩子、配置 Husky/lint-staged/pre-commit、强制 Conventional Commits、迁移 Husky v4 到 v9+ 等场景。
主要能力:说明各钩子触发时机与常见用途(pre-commit 检查暂存文件、commit-msg 校验信息格式、pre-push 跑测试、post-merge 装依赖等);原生 .git/hooks 脚本写法(本地私有、不随仓库共享);Husky 管理钩子配合 lint-staged 只处理暂存文件以提速;用 commitlint 与 @commitlint/config-conventional 约束类型与长度;pre-commit 框架通过 .pre-commit-config.yaml 定义钩子并在隔离环境运行,含 black、ruff、shellcheck 等;自定义 shell 钩子检查分支、调试语句、大文件和疑似密钥;以 core.hooksPath 共享钩子目录;在 CI 中复跑 pre-commit 或 eslint/prettier 做兜底。
使用方式:Node 项目执行 npm install --save-dev husky lint-staged、npx husky init,在 .husky/pre-commit 写 npx lint-staged,.husky/commit-msg 写 npx --no -- commitlint --edit $1,pre-push 写 npm test,lint-staged 配置放在 package.json。Python 或多语言项目执行 pip install pre-commit、pre-commit install、pre-commit install --hook-type commit-msg、pre-commit run --all-files,并可用 pre-commit autoupdate、clean 等命令维护。
适用场景与限制:适合团队统一提交规范、减少 CI 往返;钩子仅为便利手段,CI 才是最终执行者。注意钩子默认不随仓库版本化,需借助框架或 core.hooksPath;常见故障包括未安装、不可执行、残留旧钩子及本地与 CI 环境版本不一致。可用 git commit --no-verify、git push --no-verify 或 SKIP=eslint 临时跳过,但应尽量避免。pre-commit 需 Python 环境;性能上应只检查暂存文件、尽量自动修复并保持钩子快速。资料未提供具体价格、平台与效果数据。