前言¶
在本地开发时,误把密钥、大文件、冲突标记或调试语句提交到仓库,往往在提交那一刻没人拦,事后清理成本极高——密钥要作废轮换、大文件要重写历史、冲突标记可能直接搞崩线上。DeepSeek Harness(DSH)的理念是「一切皆插件」,社区中有一类插件专门解决这类流程合规问题。dsh-git-guard 就是其中之一,它把「密钥进仓库」「5MB 大文件」「冲突标记」「调试残留」「被跟踪的 .env」「不规范的 commit message」拦在 commit 之前。
是什么¶
- 插件名:
dsh-git-guard(目录页:https://www.skillhub.cn/plugins/feely0208/dsh-git-guard) - 维护者:feely0208
- 分类:admin-security
- 核心价值:Git 提交前检查,通过 pre-commit hook 与 CLI 命令,在提交前对工作区/暂存区进行密钥扫描、大文件检测、冲突标记检查、调试残留检查以及 commit message 规范校验,把问题挡在 commit 之前。
核心能力¶
1. 扫描工作区/暂存区(scan)¶
scan 命令会检查当前仓库(工作区 + 暂存区),报告以下六类问题:
- 疑似密钥 token:AWS、GitHub、Slack、Stripe、Google 以及通用的
api_key=...模式 - 私钥文件:以
-----BEGIN ... PRIVATE KEY-----开头的文件 - 大文件:超过 5MB 的文件(默认阈值,可用
--max-size调整) - 冲突标记:
<<<<<<<、=======、>>>>>>> - 调试残留:
debugger、console.log、console.debug(默认按警告处理) - 被跟踪的
.env:.env、.env.local等文件(.env.example、.env.sample等不算)
示例:
dsh-git-guard scan
只检查暂存区:
dsh-git-guard scan staged --input <目录>
2. 校验 commit message(msg)¶
msg 命令校验 commit message 是否符合 type(scope): subject 约定,包括:
- type 白名单(常见子集,如 feat、fix、docs 等)
- 标题长度 ≤72 字
- 标题与正文之间空一行
- subject 不以句号结尾
- Merge / Revert / fixup! 等情况自动豁免
示例:
dsh-git-guard msg --message "feat(api): 支持批量导出"
3. 组合扫描与校验(precommit)¶
precommit 组合了 staged 扫描 + message 校验,有问题时退出码为 1,可直接挂 git hook。
安装 pre-commit hook:
dsh-git-guard precommit install --input <目录>
手动组合检查:
dsh-git-guard precommit --input <目录>
安装后,每次 git commit 前会自动跑 precommit,退出码 1 会阻止提交。确实需要跳过时可用 git commit --no-verify(不推荐)。
4. 输出与 demo¶
- 终端输出:分组报告,便于人工快速定位
--json:结构化输出,适合 CI 流水线--out:额外生成一份 Markdown 报告--demo:自造一个临时 Git 仓库(密钥均为伪造值),把六类问题 + message 校验整套跑一遍,打印产物路径
示例:
dsh-git-guard scan --json
dsh-git-guard scan --out
dsh-git-guard --demo
安装与启用¶
通过 DSH 插件命令安装:
dsh plugin --profile web add @deepwhale-cn/dsh-git-guard
安装后,可以在任意目录运行 CLI:
npx @deepwhale-cn/dsh-git-guard --help
适用场景与注意¶
- 适用场景:需要规范提交流程、防止密钥与敏感信息误提交、避免大文件进入仓库、确保 commit message 风格一致的团队或个人项目。
- 注意事项:
- 不扫历史提交,只检查当前工作区/暂存区;已提交的密钥需另行轮换并用
git filter-repo等工具处理历史。 - 不是完整秘密扫描器,正则命中仅为提示,需要人工确认。
- 不接管 husky / lefthook 等工具,只写入
.git/hooks/pre-commit(原 hook 会自动备份为.bak)。 - message 规则是常见子集,团队自定义 type / 模板需自行扩展代码。
console.log只算警告,默认不拦截(--strict可把警告也当错误)。- 不自动迁移大文件,只报出问题。
- 需要本机装 Git;纯 Node ESM,不联网、不装依赖。
- 挂 pre-commit 的前提是当前目录是已
git init的仓库(hook 写入.git/hooks/),在非 git 目录不会自动生效,需先git init或按precommit install提示操作。
结语¶
dsh-git-guard 是一个轻量、聚焦的 Git 提交前检查插件,覆盖密钥、大文件、冲突标记、调试残留和 commit message 规范,适合作为 DSH 插件生态中的 admin-security 类工具使用。完整说明见目录页与 GitHub 仓库:
- 目录页:https://www.skillhub.cn/plugins/feely0208/dsh-git-guard
- GitHub:https://github.com/feely0208/dsh-git-guard