中文EN

@yann9/dsh-git-workbench

git已测通过npmMIT

DSH 的 JetBrains 风格 Git 工作台:按块与按行暂存、带词级高亮的并排 diff、提交图与分支操作、三方冲突合并,还能用宿主模型起草提交信息。

下载量 / Downloads
1,793
依赖体积 / node_modules
4.64 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add @yann9/dsh-git-workbench

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-git-workbench

JetBrains 式的 Git 工作台,跑在 DeepSeek Harness 里。 Local Changes 树、逐 Hunk / 逐行暂存、并排 Diff、Commit 窗口、提交图、Annotate、交互式变基、储藏、冲突三方视图 —— 全部留在会话旁边,不用切终端。

目标不是"能提交",而是"改哪一行、暂存哪一段、提交进哪个分支"都能像在 IDEA 里一样看得见。

![npm version](https://www.npmjs.com/package/@yann9/dsh-git-workbench)

![npm downloads](https://www.npmjs.com/package/@yann9/dsh-git-workbench)

![CI](https://github.com/yann9/dsh-git-workbench/actions/workflows/ci.yml)

![node](package.json)

![DSH](#安装)

![license](LICENSE)

[English](README.md) · [中文](README.zh.md) · [功能清单](docs/features.zh.md) · [HTTP API](docs/api.zh.md) · [架构](docs/architecture.zh.md) · [设计取舍](docs/jetbrains-parity.zh.md) · [开发与发布](docs/development.zh.md)


是什么

DSH 的右侧栏是可拖动的页签区(能拖到别的面板、拆成第二栏、浮动、全屏),正好对应 IDE 的两个工具窗口;diff 则和 IDEA 一样开在编辑器位置、只有一块。于是插件就是三个彼此独立的界面:

JetBrains · 这里 · 内容

Commit 工具窗口 · 页签 提交 · 变更树 + 变更列表 + 冲突 + 提交信息 + AI / 最近信息 / 检查 / Amend

Log 工具窗口 · 页签 历史 · 提交图 + 提交详情 + 文件清单,只读

编辑器里的 diff tab · 主区域 差异视图 · 并排 / 统一 diff、块级与行级暂存、Annotate、冲突三方视图,单例、每次替换

提交与历史各有自己的勾选、滚动、过滤和草稿,互不干扰;差异视图由"来源"决定内容与可写性——从「提交」进来是工作区(可写),从「历史」或会话轮次进来是只读快照。

此外它还接进了 DSH 自己的几个 surface:会话头部的分支芯片、新会话空状态的分支选择器、会话卡片的 Git 按钮、右侧「文件」页的 Git 按钮、输入框上方的改动条。仓库绑定会话的 cwd,切换会话就切换仓库。

截图

差异视图(并排、行内词级高亮) · 历史页(提交图 + 表头排序)

![差异视图](docs/assets/diff.zh.png) · ![历史页](docs/assets/history.zh.png)

冲突三方视图 · 储藏(命名 + 部分文件)

![冲突视图](docs/assets/conflict.zh.png) · ![储藏弹窗](docs/assets/stash-dialog.zh.png)

深色主题完全跟随宿主,没有自己的主题开关,因此不再单独保留深色截图。同一组界面的中文版截图也在同目录(*.zh.png),本文件用的是那套。

安装

插件以目录形式安装到 DSH 的 web profile。先在 PATH 上准备好 git、Node ^22.19.0 || >=24.0.0、pnpm(dsh plugin 转发给它)以及 DSH 0.2.1-rc.2 以上。

# 从 npm 安装
dsh plugin --profile web add @yann9/dsh-git-workbench

# 或让 DSH 从本地目录安装(file: 复制内容;link: 建符号链接)
dsh plugin --profile web add link:<仓库目录的绝对路径>

# bundle 层只在启动时读取,重启后生效
dsh web

打开终端打印的 ?token=... 地址。右侧栏 + 的引导页里能看到并打开「提交」「历史」,会话头部的分支芯片、设置 → 插件 → Git 工作台也直接可用。

file: 安装是复制,改完代码要重新 add;开发期用 link:,改完重启一次即可(代价是要自己维护下面这行 bundle 登记)。

如果 profile 里没有自动登记 bundle(DSH 0.2.1-rc.2 用 link: / file: 安装时偶发),在 ~/.dsh/profiles/web/package.json 里补一行,效果与 plugin add 相同:

"dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "@yann9/dsh-git-workbench"] } }

升级与卸载(同样要重启 dsh web):

dsh plugin --profile web add @yann9/dsh-git-workbench@latest
dsh plugin --profile web remove @yann9/dsh-git-workbench

/dsh-git/ 只提供 JSON API 与 SSE 事件流,没有独立页面;任何别的客户端都可以直接复用它(见 [docs/api.zh.md](docs/api.zh.md))。

配置

全部配置项都能在 设置 → 插件 → Git 工作台 里改(保存后插件自动重载一次),也可以直接写进 profile 的 cordis.patch.yml 后重启 dsh web:

- insert:
    - id: git-workbench
      name: '@yann9/dsh-git-workbench'
      config:
        repoPath: ''                   # 没有任何会话上下文时的兜底仓库
        maxLog: 400                    # 提交图/历史最多取多少条(1–5000)

        readOnly: false                # true = 只读:写接口一律 403,界面不出现写入入口

        branchPattern: 'session/{date}-{time}'   # 新建分支的默认名,占位符 {date} {time} {datetime} {repo}
        confirmDirtySwitch: true       # 工作区有改动时,切分支先确认

        diffFullFile: true             # true = 整文件 + 折叠未变区;false = 只看改动前后 3 行
        diffWrap: true                 # true = 长行软换行;false = 裁切
        diffFoldThreshold: 8           # 未变区超过多少行折叠(2–500)
        diffSideBySide: true           # 首次打开用并排还是统一视图

        listMode: 'last'               # 'tree' | 'flat' | 'last'(跟随上次选择)

        commitLanguage: 'auto'         # 'auto'(跟随界面语言)| 'zh' | 'en'
        llmProvider: ''                # 留空 = DSH 里选中的模型路由
        llmModel: ''                   # 留空 = 该路由选中的模型

未写的键使用上表默认值。readOnly: true 适合把工作台当作只读评审面板:暂存、提交、分支、网络、冲突解决全部禁用,HTTP 写接口返回 403(/config 除外)。

主要能力

完整的 50+ 项对照表在 [docs/features.zh.md](docs/features.zh.md),这里只列骨架:

  • 暂存:整文件 / 逐 Hunk(裁剪 patch → git apply --cached)/ 逐行;反向取消暂存同样精确。提交永远以 index 为准。
  • 差异阅读:并排与统一视图、双行号、行内词级高亮、忽略空白(只读保护)、未变区折叠、文件间 ‹ n/m › 与块间 F7。
  • 提交:Commit 窗口(Ctrl+Enter)、AI 草稿与最近信息召回(↑)、Amend、变更列表、提交前按仓库 package.json 跑检查(失败默认拦截)。
  • 历史:DAG 泳道提交图、表头排序、列宽可拖、列开关、按分支/作者/日期归类、结构化筛选(author: message: hash: tag: branch: date:)、多选后批量拣选 / 还原。
  • 改写历史:交互式变基(pick / squash / fixup / drop)、改写提交信息、撤销提交、拣选、还原、软/硬重置,全部二次确认。
  • 分支与远程:切换 / 新建 / 重命名、领先落后 ↑N ↓N、设置与取消上游、分支比较、变基到所选分支、fetch / pull / push(首次推送让你选远程)、远程仓库增删改。
  • 冲突与序列器:unmerged 独立分组、三方视图逐块选边或手写合并结果、合并 / 拣选 / 变基暂停时的状态条与「继续 / 中止」。
  • 储藏:命名 + 勾选文件(部分储藏走临时 index,不带走别的暂存内容)、只读预览、应用 / 弹出 / 删除。
  • 可观测:Git 控制台按仓库记录每条真实 argv、退出码、耗时与输出,失败自动展开。
  • 空目录:一键 git init,不动现有文件。
  • 中英双语:跟随 DSH 的语言偏好(没设置时看浏览器语言),切换即时生效;Git 的英文拒绝会被本地化而不是原样甩给用户。

快捷键

操作 · 快捷键 / 手势

刷新 · F5

提交 · Ctrl/Cmd + Enter

聚焦提交信息 · Ctrl/Cmd + K

AI 生成提交信息 · Ctrl/Cmd + G

上一个 / 下一个文件 · Alt + ↑ / Alt + ↓,或头部 ‹ n/m ›

上一个 / 下一个差异块 · Shift + F7 / F7,或工具栏 ↑ 差异 ↓(走到头自动进相邻文件)

还原当前差异块 · Ctrl + Alt + R(工作区来源,先确认)

当前文件集里挑文件 · 点头部 3 / 5

从差异回到会话 · Esc 或右上角 ✕

历史页逐条翻提交 · ↑ / ↓、Home / End,Enter 或双击打开差异

历史页多选提交 · Ctrl/⌘ 点选、Shift 连选、Ctrl+A 选可见项、Esc 清空

空提交框召回上一条信息 · ↑ / ↓

暂存选中行 · 点行首 +/− 选中,再点「暂存选中行」

文档

文档 · 内容

[docs/features.zh.md](docs/features.zh.md) · 与 JetBrains 逐项对照的完整功能表、布局断点、已知限制、路线图

[docs/api.zh.md](docs/api.zh.md) · /dsh-git/api 全部端点、参数、缓存与 CSRF 约定,以及给模型的 8 个工具

[docs/architecture.zh.md](docs/architecture.zh.md) · host / client 分层、DSH 槽位、状态同步、多语言、安全模型

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:9,最后更新 2026-10-29

链接

GitHub · Homepage · npm

同类插件