@duke-dsh-plugins/dsh-git-manager

中文文档
1.7.1发布于 2026/11/13MITES Module构建来源已验证近 30 天下载 2145

DSH 正式 bundle 插件:在 DSH Web UI 里管理 Git 工作区——入口在输入框「模式」选择器旁(仅 git 仓库显示),进入与设置同规格的居中面板:变更暂存(hunk 级/行级/stash)、分支与 tag、交互式 rebase、提交历史(分支线图形/过滤/范围对比/revert/reset/fixup/undo)、合并冲突解决、blame/reflog、worktree 管理(行内脏状态、作用域切进 review 改动、自动注册为 DSH 工作区)、remote/config 设置,

中文使用文档
文档目录14 节
  1. DeepSeek Harness Git 管理插件
  2. 功能全景(六域)
  3. 子仓库(submodule + 嵌套独立仓库)
  4. 仓库感知入口与面板
  5. Remote 方法一览
  6. 工作原理
  7. 安装
  8. 标准安装(推荐)
  9. 兼容性
  10. 使用
  11. 目录结构
  12. 开发
  13. 发布
  14. License

DeepSeek Harness Git 管理插件

DSH plugin MIT License Web UI

中文


为 DeepSeek Harness(DSH) Web UI 打造的 Git 工作区管理插件:不用再切到外部 Git 客户端——输入框工具行的 Git 按钮一键打开与「设置」同规格的居中面板,按六个功能域覆盖日常全部 Git 操作:变更暂存(hunk 级 / 行级 / stash)、分支与 tag、带分支线图形的提交历史(交互式 rebase / revert / reset / fixup / undo / 范围对比)、合并冲突解决、worktree 管理、remote / config 仓库设置,以及子仓库支持(git submodule 与目录内嵌套独立仓库:变更聚合、仓库切换、误暂存/误删防护)。

功能全景(六域)

面板按六个功能域组织(六个 Tab:变更 / 分支 / 历史 / 冲突 / Worktree / 设置):

域能力
📝 变更置顶提交框(多行 message + amend)、staged / unstaged / untracked 三组文件、文件级暂存/取消暂存/全部暂存,diff 窗口内 hunk 级 + 行级操作(暂存/撤销/取消暂存此块、点选任意行暂存/撤销,IDEA 式逐块),文件「丢弃」(CJK 文件名完整支持)、文件历史,stash 全家:暂存更改到 stash(可含未跟踪)、列表、应用 / 弹出 / 删除 / 清空
🌿 分支本地 / 远程列表(upstream、ahead/behind 角标),按 / 分组的可折叠文件树;新建分支支持起点下拉 / 行内「基于此建分支」预填起点 + 创建后切换;切换 / 改名 / 删除(未合并需二次确认)/ 合并,与当前分支对比 diff;Tag 区:列表、新建(含 annotated + force)、push 到远程、删除
🕸 历史分支线图形(git log --all --date-order + Host 侧布局计算 + Client 纯 SVG 渲染,长跨度边自动省略淡化、悬停高亮单条分支走向)+ refs 徽章 + 「加载更多」渐进取全窗;过滤条(ref/tag、文件路径、作者、grep、起止日期);提交详情侧栏(完整信息 + 变更文件统计,点文件开只读 diff / blame / 该文件历史);范围对比(依次选 base / head 两提交看 diff);交互式 rebase(「从这里整理历史…」:todo 排序 + pick/squash/fixup/drop/edit + squash 信息编辑);提交操作:Revert、Reset 当前分支(soft / mixed / hard)、fixup 修正任意提交、cherry-pick 到当前分支、undo(撤销上次提交 / 撤销上次分支移动,带重做提示)
🔀 冲突合并进行中横幅(继续 / 中止)+ 每文件三种解决方式:ours / theirs / 手动编辑(base / ours / theirs 三栏对照 + 可编辑区);revert / cherry-pick 冲突复用同一流程
🌳 Worktree列表 / 添加弹窗(路径 + 新分支名 + 起点;成功后自动注册为 DSH 工作区,workspace-write 沙盒下直接可写)/ 删除(脏目录需 force 二次确认)/ prune
⚙️ 设置Remote 管理:列表(fetch / push URL)、添加、重命名、删除;Config 读写:local / global 切换、key-value 表编辑、添加、删除
🎨 主题适配颜色全部走 DSH 设计 token(主按钮与输入框发送按钮同色),明暗主题自动跟随

子仓库(submodule + 嵌套独立仓库)

面板把工作区里的 git 仓库组织成一棵「仓库树」,两类子仓库统一支持:

  • git submodule(.gitmodules 注册,含未初始化 / 指针不符 / 冲突状态识别)与嵌套独立仓库(目录里有自己的 .git、未注册为 submodule 的克隆)。
  • 变更 Tab 聚合:文件列表按仓库分组(主仓库在最上,其余按相对路径排序),每组组头带分支 / 脏计数 / 子模块状态徽标;组内暂存 / 取消暂存 / 丢弃 / diff / blame / 文件历史 / hunk 操作全部作用于该组仓库自身。子模块指针变更显示「指针 abc123d → def456e」,可直接暂存新指针或「进入」子仓库处理内容改动。
  • 仓库切换器:分支 / 历史 / 冲突 / Worktree / 设置五个 Tab 顶部一键切换当前仓库,Fetch / Pull / Push 与全部操作跟随所选仓库;提交框也可选目标仓库。
  • 指针 diff 与跳转:子模块指针变更在 diff 窗口显示「指针 abc123d → def456e」,可一键「在子仓库中查看 a..b」——自动切作用域、切历史 Tab 并发起范围对比;指针提交不在子仓库对象库时按钮自动禁用。
  • 指针冲突解决:合并产生的子模块指针冲突在冲突 Tab 提供「用我们的指针 / 用他们的指针」(指针没有可编辑文本,不提供手动编辑)。
  • 安全防护:嵌套独立仓库不会被「暂存全部」误折成意外 gitlink(自动 exclude),也不会被「删除全部未跟踪」连历史一起删掉(自动跳过并提示;未跟踪目录已支持整目录递归丢弃)。
  • submodule 管理(设置 Tab「子仓库」管理区):子模块行提供 更新 / 同步 url / 卸载(危险二次确认)/ 进入,未初始化子模块一键「初始化并拉取」(变更 Tab 组头也有同款「初始化」按钮);「添加子模块」表单支持本地路径 url(自动放行 file 协议);嵌套独立仓库可就地「注册为 submodule」(目录内容不动,仅写 .gitmodules 与 gitlink,需配置 remote.origin.url);多仓库时头部提供「Fetch 全部 / Pull 全部」(串行逐仓库、单点失败不中断、结束聚合汇总成功/失败)。

仓库感知入口与面板

功能说明
🔘 仓库感知入口composer 底部「模式」选择器旁的 Git 按钮(分支图标 + 当前分支名),hero 页与会话内都有;仅当前目录是 git 仓库时显示(60s 轮询缓存,非仓库完全不占位)
🪟 设置同规格面板800px 居中弹窗、圆角 24、毛玻璃遮罩;Esc 与遮罩点击均可关闭;DOM 经 Portal 落到 body 层(z-index 1000),不被任何侧栏插件遮挡;diff 窗口、确认/表单弹窗全部 Portal 落 body 并按层级叠加(1000 / 1050 / 1100),Esc 只关栈顶弹层

Remote 方法一览

Host 侧 gitManager 服务暴露的 Remote 方法(客户端 RPC 唯一入口),v2 新增/扩展部分加粗:

方法用途
probe / overview / status仓库探测(是否 git 仓库、当前分支)与整体状态概览
repoTree子仓库树发现:主仓库 + 全部 submodule(含未初始化)+ 嵌套独立仓库,每节点带分支与脏计数摘要
diff / stageHunk查看工作区 diff;按 hunk 序号暂存单个块(git apply --cached)
stage / unstage / discard文件级暂存 / 取消暂存 / 丢弃(含未跟踪);stage 支持 exclude(「暂存全部」排除嵌套仓库目录,防意外 gitlink)、discard 返回 skipped(含 .git 的嵌套仓库被保护跳过)
commit提交(支持 amend、全部暂存并提交)
stashList / stashPush / stashPop / stashApply / stashDrop / stashClearstash 全家:列表、暂存(可含未跟踪)、弹出、应用、删除、清空
branches / branchCreate / branchDelete / branchRename / merge分支列表与新建 / 删除 / 改名 / 合并
tags / tagCreate / tagDeletetag 列表、新建(annotated / force)、删除
log(扩展)提交列表 + 分支线布局;新增 ref / 路径 / 作者 / grep / 日期过滤参数
push(扩展) / pull / fetch网络操作(netResult 包络);push 新增 refSpec 参数(用于 push tag)
diffRange任意 base..head 范围对比(patch / stat 两种输出)
blame逐行归属查询(sha / 作者 / 时间 / 行内容,支持行区间与截断)
reflog引用日志(head 移动历史)
revertRevert 指定提交(冲突不抛错,进 REVERT_HEAD 态走冲突流程)
resetReset 当前分支(soft / mixed / hard)
rebasePlan / rebaseRun交互式 rebase:todo 计划(base..HEAD)+ 执行(pick/squash/fixup/drop/edit、排序、squash 信息替换)
fixupCommit用暂存改动修正任意历史提交(fixup / squash + autosquash rebase)
rebaseBranch当前分支 rebase 到指定分支之上
lineApply行级暂存 / 撤销 / 取消暂存(diff 行区间最小补丁)
cherryPick / mergeContinue / abortMergecherry-pick / rebase 与冲突后续:继续(按状态分派 commit / rebase --continue)/ 中止(merge / cherry-pick / revert / rebase 通用)
resolveConflict冲突解决(ours / theirs / 自定义内容)
remoteAdd / remoteRemove / remoteRenameremote 增 / 删 / 改
configList / configSet / configUnsetgit config 读 / 写 / 删(local / global)
worktrees / worktreeAdd / worktreeRemove / worktreePruneworktree 管理
init目录初始化为 git 仓库

工作原理

Composer Git 按钮(conversation.input.left,仅仓库显示)
  └─ probe 轮询探测(60s 缓存,非仓库返回 null)
        └─ 点击 → 全屏面板(ReactDOM.createPortal → document.body,z-index 1000)
              └─ Remote RPC(gitManager.*,返回值网关 JSON-safe 校验)
                    └─ Host:git-core.mjs(execFile argv 数组,无 shell 拼接)
                          └─ git 子进程(GIT_TERMINAL_PROMPT=0,凭证挂起免疫)
  • 所有 git 调用走 execFile argv 数组,无 shell 注入;Windows 下隐藏子进程窗口。
  • 危险操作全部 UI 二次确认(丢弃 / 中止合并 / 删除分支或 tag / 清空 stash 等);hard reset 需额外输入 "RESET" 打字确认;force push 只允许 --force-with-lease。
  • 输出有上限保护:diff 超 1.5MB 截断提示、log 默认 200 条 / 页;大 diff / blame 截断渲染,不一次输出超大内容。
  • 仓库路径防护:涉及写文件的操作(未跟踪 discard / 手动解冲突 / blame / hunk patch)先校验路径不越出仓库根;sha 入参白名单校验(纯十六进制),reset target 拒绝选项注入。

安装

标准安装(推荐)

本插件是标准 DSH bundle:package.json 声明 dsh.bundle.patch,包内自带 cordis.patch.yml,用官方 dsh plugin 命令安装:

# npm(推荐)
dsh plugin --profile web add @duke-dsh-plugins/dsh-git-manager

# 或从 GitHub Release tarball 安装
dsh plugin --profile web add https://github.com/MoonlitDropOfBlood/dsh-git-manager/releases/download/v1.0.0/duke-dsh-plugins-dsh-git-manager-1.0.0.tgz

# 本地开发:pnpm 软链到本仓库,改代码即生效(无需重新复制)
dsh plugin --profile web add /path/to/dsh-git-manager

重启 DSH 后:当前工作区是 git 仓库时,输入框「模式」选择器旁出现 Git 按钮。

dsh plugin add 把插件装成 profile 的 npm 依赖并追加到 dsh.profile.bundles,启动时 DSH 自动应用包内的 cordis.patch.yml 挂载插件。卸载:dsh plugin --profile web remove dsh-git-manager。

兼容性

宿主要求 DSH ^0.1.0-rc.7 || ^0.1.1-rc.0 || ^0.2.0-rc.1 || ^0.2.1-rc.0(package.json 顶层 engines.dsh + dsh.engines.dsh 双位置声明,dshmarket 卡片的「宿主要求」/「适配本机 DSH 版本」筛选即读此值;peer @deepseek-ai/dsh-typert-protocol 同 range——dshmarket 的 peer 诊断按 npm 默认预发布准入求值,profile 把该 peer 解析到 0.1.1-rc.2 时需要同 tuple 候选 ^0.1.1-rc.0 才不告警)。Typert strict codec 采用 schema + create() 双形态,已用 DSH 全部 21 个 typert-loader 版本(0.1.0-rc.6 … 0.1.7-rc.2)逐一校验 manifest 通过——0.1.6-alpha.2 起 DSH 改用 codec.create(). 工厂,只写 schema 会在 0.1.7 上导致 $mount 抛 has no create() factory、入口按钮不出现。

使用

  1. 打开面板:当前工作区是 git 仓库时,点击输入框工具行的 Git 按钮(分支图标 + 分支名)。
  2. 变更:置顶提交框写 message(可 amend);勾选文件 stage / unstage;点击文件看 diff,窗口内可逐 hunk 暂存 / 撤销 / 取消暂存;底部 Stash 区暂存 / 应用 / 清空工作区改动。
  3. 分支:顶部 Fetch / Pull / Push(ahead/behind 角标同步状态);分支列表里切换、新建、改名、合并、删除;下方 Tag 区新建、push、删除 tag。
  4. 历史:分支线 + 提交列表,可用过滤条按 ref / 路径 / 作者 / 关键字 / 日期筛选;点提交打开详情侧栏(查看 diff、cherry-pick、Revert、Reset 到此提交——hard 需打字确认);「对比…」可依次选两个提交看范围 diff。
  5. 冲突:合并 / cherry-pick / revert 冲突时出现在此 Tab——逐文件选 ours / theirs,或手动编辑后保存标记已解决;全部解决后「继续」。
  6. Worktree:添加弹窗输入路径(可同时开新分支、选起点);添加成功后自动注册为 DSH 工作区,直接在侧栏打开开会话即可让 agent 在沙盒内读写。
  7. 设置:管理 remote(添加 / 重命名 / 删除)与 git config(local / global 读写)。
  8. 关闭:Esc 或点击遮罩。

目录结构

dsh-git-manager/
├── index.js              # Host 半:GitManagerService(TypertRemoteService 子类,类插件)
├── client.js             # Client 半:__ModuleLoader__ bundle(composer 入口按钮 + 弹窗面板)
├── typert.host.js        # Typert Host manifest:gitManager 全方法的 wire schema
├── git-core.mjs          # 零依赖:runGit 封装 + 全部查询/变更函数 + 解析器
├── git-graph.mjs         # 零依赖:computeGraph 分支线布局(纯函数)
├── cordis.patch.yml      # dsh bundle patch(挂载行)
├── scripts/self-test.mjs # 独立自测:解析器 fixture + 临时仓库 live 集成(不依赖 DSH 进程)
├── .github/workflows/    # GitHub Actions 发布(tag → npm OIDC + GitHub Release)
├── AGENTS.md             # 面向 AI agent 的开发指南(含踩坑)
└── LICENSE               # MIT

开发

npm run check           # 语法检查全部 JS
npm test                # 自测(解析器 fixture + 临时仓库 live 集成,真实 git)
dsh plugin --profile web add /path/to/dsh-git-manager   # 安装/重装到本机 DSH profile

改插件后必须重启 DSH 才生效。详见 AGENTS.md——记录了 DSH 正式插件三件套机制、网关 JSON-safe 返回值、主题 token 映射等完整踩坑。

发布

打 v* 标签推到 GitHub:.github/workflows/release.yml 自动跑测试、构建 tgz、发布 GitHub Release,并通过 OIDC Trusted Publishing 发布到 npm(已存在的版本自动跳过,可安全重放)。

License

本项目遵循 MIT License。

本项目是基于 DeepSeek Harness 构建的社区插件,并非 DeepSeek 官方产品。

版本与发布记录

@duke-dsh-plugins/dsh-git-manager 共发布 13 个版本,首次发布于 2026/08/29;过去 12 个月发布了 13 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.7.1latest2026/11/13今天
1.7.02026/10/2123 天前
1.6.22026/10/2024 天前
1.6.12026/10/1925 天前
1.6.02026/10/1925 天前
1.5.12026/10/1925 天前

关于 @duke-dsh-plugins/dsh-git-manager 的常见问题

@duke-dsh-plugins/dsh-git-manager 是什么?

DSH 正式 bundle 插件:在 DSH Web UI 里管理 Git 工作区——入口在输入框「模式」选择器旁(仅 git 仓库显示),进入与设置同规格的居中面板:变更暂存(hunk 级/行级/stash)、分支与 tag、交互式 rebase、提交历史(分支线图形/过滤/范围对比/revert/reset/fixup/undo)、合并冲突解决、blame/reflog、worktree 管理(行内脏状态、作用域切进 review 改动、自动注册为 DSH 工作区)、remote/config 设置,

如何安装 @duke-dsh-plugins/dsh-git-manager?

在项目目录运行 npm install @duke-dsh-plugins/dsh-git-manager,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@deepseek-ai/cordis(^4.0.1)、@deepseek-ai/dsh-typert-protocol(^0.1.0-rc.7 || ^0.1.1-rc.0 || ^0.2.0-rc.1 || ^0.2.1-rc.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@duke-dsh-plugins/dsh-git-manager 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/duke-dsh-plugins__dsh-git-manager 是否存在。

@duke-dsh-plugins/dsh-git-manager 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@duke-dsh-plugins/dsh-git-manager 可以商用吗?

@duke-dsh-plugins/dsh-git-manager 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@duke-dsh-plugins/dsh-git-manager 的下载量有多少?

根据 npm 官方下载统计,@duke-dsh-plugins/dsh-git-manager 在 2026/10/13 – 2026/11/11 这 30 天内被下载 2,145 次,日均约 72 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@duke-dsh-plugins/dsh-git-manager 还在维护吗?

最新版本 1.7.1 发布于 2026/11/13(今天);至今共发布 13 个版本,其中过去 12 个月发布了 13 个;首次发布于 2026/08/29。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。