dsh-git-guard:在 Git 提交前拦下密钥、大文件与不规范消息

前言

在本地开发时,误把密钥、大文件、冲突标记或调试语句提交到仓库,往往在提交那一刻没人拦,事后清理成本极高——密钥要作废轮换、大文件要重写历史、冲突标记可能直接搞崩线上。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

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye