commit-guard-zh — 提交/推送前护栏 + 中文 commit
提交前在本地把关,别让密钥、迁移炸弹、误推主分支溜进仓库;干净了再帮你写一条规范的中文 commit。
何时触发
用户说"准备提交 / 帮我 commit / 提交一下 / 要 push 了"等。
工作流
1. 跑检查(确定性脚本,在仓库根目录执行)
bash <skill>/bin/secret-scan.sh # 扫 staged diff 的密钥/凭据
# 若该 repo 是 Go+GORM(.commit-guard.sh 里 ENABLE_GORM_CHECK=1):
bash <skill>/bin/gorm-mysql-check.sh # 扫 staged .go 的 TEXT/JSON 带 DEFAULT
# 若启用了 md lint(ENABLE_MD_LINT=1,需装 markdownlint-cli):
bash <skill>/bin/markdownlint-check.sh # 扫 staged .md(未装 linter 则自动跳过)
- 任一脚本
exit 2→ 停下。把 stderr 里的问题用中文讲清楚 + 给修法,等用户处理,不要擅自跳过或--no-verify。 - 全
exit 0→ 进入下一步。
2. 生成中文 commit
读 git diff --cached,生成一条 conventional 前缀 + 中文描述的 message:
- 前缀按改动性质:
feat:/fix:/refactor:/docs:/test:/chore: - 描述用中文;代码标识符、API、库名保持英文
- 多个改动点用 body 分条
- 展示给用户确认后再
git commit
3. 若要推送
bash <skill>/bin/push-guard.sh <分支名>
- 推到受保护分支(默认 main/master)时:先确认本回合用户是否已明确授权推送主分支(这是会自动部署/影响线上的高风险操作)。授权了再
COMMIT_GUARD_CONFIRM=1 git push。 - 脚本若报 env/密钥文件混进待推提交 → 停下,协助移除。
也可装成 git hook(不依赖 Claude)
确定性检查能装进目标 repo 的 pre-commit / pre-push,这样手动 git 操作也有护栏:
bash <skill>/install.sh /path/to/your-repo
详见 README。
配置
目标 repo 根目录放 .commit-guard.sh(从 config.example.sh 复制):
BRANCH_PROTECT="main master"— 受保护分支ENABLE_GORM_CHECK=0— 是否启用 GORM 检查(仅 Go+GORM 项目;默认关)ENABLE_MD_LINT=0— 是否启用 markdownlint 检查 .md(需 markdownlint-cli;默认关,未装自动跳过)SECRET_WHITELIST=""— secret 误报白名单(extended regex)
边界
- 只看本次 staged / 本次待推的提交,不扫历史、不联网。
- secret 命中宁可误报也拦,误报走白名单豁免。
- 不替代 CI,是本地前移的快速护栏。