SuperAPI AI 工具集

git-hooks-setup

编程与开发

查看项目

更新于 10-14 05:41

技能介绍

Git Hooks Setup 用于一键配置 Git Hooks,标准化团队开发流程。它自动生成 pre-commit / commit-msg / pre-push hook 配置,包含代码格式化、commit message 校验、敏感信息检查,并支持 husky 和原生 git hooks 两种方案。

适用场景 用户想设置 git hooks;提到 pre-commit 或 commit message 规范;想自动化 lint/format 检查;输入 /git-hooks-setup;想强制执行推送前检查(测试、lint);想防止推送损坏代码;想统一团队提交信息格式;想在提交前加入密钥扫描;想每次提交自动格式化代码。

不适用场景 用户只想查看当前 git hooks 配置;想使用 CI 检查(不需要本地钩子);项目已有完整 hooks 配置;只想对特定文件运行钩子(可直接使用 lint-staged);想接入 pre-commit/commit-msg/push 以外的 Git 事件。

核心流程 第 1 步:检测项目环境。按 lock 文件判断包管理器(package-lock.json → npm、yarn.lock → yarn、pnpm-lock.yaml → pnpm);检测已有 hooks 配置(.husky 目录、.git/hooks/pre-commit);从 package.json 检测已安装的 lint 工具(eslint/prettier/lint 相关)。

第 2 步:选择方案。husky 适用于 Node.js 项目,团队协作友好、配置即代码;原生 git hooks 适用于非 Node.js 项目,无依赖。

第 3 步:生成配置。方案 A(Husky):根据包管理器选择 pnpm dlx / yarn dlx / npx 执行 husky init;生成 .husky/pre-commit(执行 lint-staged)和 .husky/commit-msg(执行 commitlint,commitlint 需加 --no 前缀避免交互式安装);生成 lint-staged 配置写入 package.json(如 .ts/tsx/js/jsx 用 eslint --fix 和 prettier --write,.json/md/yml 用 prettier --write);可选生成 .husky/pre-push(按包管理器执行 test)。方案 B(原生 git hooks):写入 .git/hooks/pre-commit 执行 lint 与 format,并 chmod +x;注意不要执行 git add -u,以免提交未暂存改动,如需纳入 lint 修复结果应使用 lint-staged;可选写入 .git/hooks/pre-push 执行测试。

第 4 步:配置 Commit Message 规范。将 templates/commitlint.config.js 复制到项目根目录,基于 @commitlint/config-conventional 校验 type(scope): subject 格式,type 取值 feat|fix|docs|style|refactor|test|chore|perf|ci|build|revert,scope 可选,subject 为简短描述,header 最大长度 100 字符;同步安装 @commitlint/cli 与 @commitlint/config-conventional。

第 5 步:添加敏感信息检查。不要用 grep "password|secret|token" 关键字扫描,业务代码常见此类词会导致大面积误报;推荐使用 gitleaks(内置熵检测与允许列表,误报率低),可通过 npx gitleaks 或 brew install gitleaks 配置,或在 pre-commit 中加入 gitleaks protect --staged --verbose;若 gitleaks 不可用,宁可跳过也不要退化为关键字 grep;退而求其次只匹配高置信度模式(如私钥块、AWS 密钥、GitHub token 格式),不匹配 token/secret/password 等业务常用词。

命令与参数 /git-hooks-setup 交互式选择方案和 hooks;/git-hooks-setup --husky 直接用 husky;/git-hooks-setup --native 直接用原生 git hooks。参数 --husky 默认自动检测,--native 默认 false,--commitlint 默认 true。

常见错误 hook 脚本无执行权限需 chmod +x;lint-staged 规则过多应只检查暂存文件;commit message 校验过严应先宽松后收紧;不检查敏感信息应加入密钥扫描;.git/hooks 不提交应改用 husky/lefthook 管理;pre-push 跑太久应只跑快速检查,完整测试放 CI;hook 中用相对路径应使用绝对路径或项目根目录;跳过 prepare 脚本需确保 package.json 的 prepare 运行 husky(v9+),否则 CI 环境 hook 不生效;commitlint 规则与团队不一致应使用 commitlint.config.js 统一配置;不配置 --no-verify 白名单应允许 --no-verify 但记录日志。