ARTICLE · 1087999
DSH插件之——安全优先的 Git 工具插件
dsh-git-helper
安全优先的 Git 工具插件(dsh-git-helper v0.1.0):只读的状态/差异/历史/分支查询,加上一个带三重防护的提交工具。
安装
npm install dsh-git-helper
工具列表
git_status
查看工作区状态:当前分支、与上游的领先/落后、已暂存/未暂存/未跟踪/冲突文件分类列表。无参数。
git_diff
查看差异,支持三种范围:
参数 | 类型 | 说明 |
scope | string | unstaged(默认)/ staged / commit |
commit | string | scope=commit 时必填,如 "a1b2c3d"、"HEAD~1" |
path | string | 可选,限定文件或目录 |
context_lines | number | 可选,上下文行数 0–10,默认 3 |
输出附带变更摘要(文件数/±行数);超过 8000 字符自动截断并提示缩小范围。
git_log
提交历史,格式 短哈希 | 作者 | 日期 | 标题。
参数 | 类型 | 说明 |
limit | number | 1–50,默认 10 |
author | string | 按作者过滤 |
since | string | 如 "2026-09-01"、"2 weeks ago" |
oneline_only | boolean | 默认 true;false 时附带变更文件统计 |
git_branch
分支概览(只读):当前分支标记、各分支最近提交、与上游的领先/落后。
参数 | 类型 | 说明 |
include_remote | boolean | 默认 false |
git_commit
受控提交,三重防护:
1.前置校验:暂存区为空且未指定暂存方式时拒绝提交并列出可提交文件;存在合并冲突时拒绝。
2.提交信息规范:非空、首行 ≤72 字符,详细说明放到空行后的正文。
3.后置确认:返回提交哈希 + 变更统计。
参数 | 类型 | 说明 |
message | string | 必填 |
files | string[] | 可选,指定要提交的文件(先 add 再提交) |
add_all | boolean | 默认 false;true 时 git add -A |
安全边界
本插件不提供 push、branch 删除、rebase/merge、checkout 丢弃改动、stash、amend 等破坏性操作。git 命令通过 execFile 调用(无 shell 注入面),超时 15 秒。
测试
npm test
测试在临时 git 仓库中运行,覆盖状态识别、差异截断、历史过滤、提交防护与正常路径、非仓库目录报错,共 28 项断言。
版本历史
0.2.0(2026-09-13)
•新增 git_blame 工具:行级追溯 + 作者分布统计(兼容 boundary 提交)
•新增 check_commit_message 工具:提交信息体检(长度/CC 格式/正文分段)
•git_commit 新增 strict_cc 参数:Conventional Commits 强校验
Roadmap(v0.3 候选)
•git stash / restore 支持
•分支对比(two-dot diff 摘要)
•tag 管理与查询
源码与发布地址
•源码:https://github.com/geeklei/dsh-plugins/tree/main/dsh-git-helper
•npm:https://www.npmjs.com/package/dsh-git-helper
典型场景
1. 提交前检查
用户:帮我看看现在有哪些改动,准备提交
git_status + git_diff 快速了解工作区状态与改动内容。
2. 提交信息规范校验
用户:我的 commit message 符合规范吗
check_commit_message(支持 strict_cc 严格 Conventional Commits)逐项给出检查结论。
3. 追溯某行的来龙去脉
用户:这一行为什么这么写
git_blame 定位作者与提交(已兼容首笔提交的 boundary hash)。
4. 分支与历史梳理
用户:这个分支从哪切的、最近谁改了什么
git_branch + git_log 组合查看。
5. 生成提交
用户:把这次改动提交了
git_commit 生成提交(提交信息建议先过 check_commit_message)。
其他插件集成说明
协作插件 | 集成方式 |
dsh-text-diff | 用 diff_text 得到统一差异,与本插件 git_diff 输出互相印证 |
dsh-hash-checksum | 对关键文件取摘要,确认提交前后内容一致 |
dsh-workspace-journal | 把提交记录写入工作区日志,形成变更时间线 |
dsh-fs-inspector | 提交前用 recent_files 确认没有意外改动的大文件 |
dsh-todo-audit(二期 D13) | 提交前扫描 TODO/FIXME,避免把未完成标记带入主干 |
FAQ
Q:`git_commit` 会自动 push 吗? 不会,只做本地提交。推送需显式执行,且注意凭据助手(Windows 下建议 -c credential.helper=manager)。
Q:blame 首笔提交为什么特殊? Git 对 boundary 提交的 hash 会加 ^ 前缀,本插件已兼容解析,不会漏掉最后一行。
Q:能在无 tty 环境用吗? 可以,所有 git 调用均以非交互方式执行,不会卡在等待输入。
Q:会修改我的仓库吗? 只有 git_commit 会写(产生提交);其余工具均为只读查询。
以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~
谢谢你看我的文章,我们,下次再见。
