dsh-ide-git
DSH plugin: an IDE-grade Git tool window as a native dsh-better-sidebar tab — branch tree, commit graph, changes, commit details, JetBrains-style actions, in the right sidebar and the bottom panel. | DSH 插件:IDE 级 Git 工具窗口,以 dsh-better-sidebar 原生 Tab 挂载——分支树 / 提交图谱 / 变更与提交详情 / JetBrains 风格操作,右侧栏与底部面板双布局自适应。
What it is
DSH plugin: an IDE-grade Git tool window as a native dsh-better-sidebar tab — branch tree, commit graph, changes, commit details, JetBrains-style actions, in the right sidebar and the bottom panel…
How to install
Run this in the DSH web profile, then refresh the page.
$ dsh plugin --profile web add dsh-ide-git@0.32.0
DSH versions accepted
>=0.2.2-rc.1
Author and traction
KannaKuron · ★ 26 · Updated 2026-11-10
About this plugin
dsh-ide-git
简体中文 | [English](README_EN.md)
> 给 [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/deepseek-harness) 的侧边栏装一个 IDE 级的 Git 工具窗口——左边分支树、中间提交图谱、右边变更与提交详情,操作方式对齐 JetBrains 系 IDE 的 Git 面板;以 [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar) 原生 Tab 的形式注册,右侧栏与底部面板都能用;v0.13.0 起还可挂在主对话区(「对话 / 轨迹」旁边的 Git 标签页,设置里可关)。
DSH 自带的 Git 面板覆盖「暂存 / 提交 / 还原 / 看历史」;dsh-ide-git 补齐 IDE 用户习惯的那一层:分支树 + 右键分支操作 + 提交图谱 + 提交详情 + 变更列表 + 提交框。
它解决什么
- 分支管理没有树:内置面板只有一个分支下拉。这里给出
HEAD(当前分支) / 本地 / 远程 / 标签的分组树,每个分支带 ahead/behind 角标、上游、worktree 占用标记(W)。 - 历史只是列表:这里画出提交图谱(lane 拓扑 + 分支/标签 ref 徽章),支持无限滚动加载、框选批量选中与过滤(文本 / 哈希 / 作者 /「我」);历史范围可在当前分支 / 全部分支 / 任意本地或远程分支之间切换——别的分支领先的提交不再因为不在当前分支祖先链上而看不见;双击分支直接浏览该分支历史(不强制签出),有合并关系时自动定位到两分支最近的合并点。
- 想看某个提交改了什么:点提交直接进详情——作者、日期、完整提交信息、变更文件(含 +/− 行数),点文件看逐行 diff(红绿 + 行号 + hunk 高亮)。
- 想指给 AI 一段代码:在 diff 窗里选中几行、右键,把「哪个文件哪几行」(附提交或工作区上下文)直接发进当前会话的输入框。
- 想比较分支:分支右键即可与当前分支比较,结果按文件与提交数汇报。
- 操作要够全:签出、从任意分支/提交新建分支、重命名、删除、合并到当前(默认 /
--no-ff/--squash/--no-ff --no-commit)、变基当前到此、新建标签、cherry-pick、还原提交、重置(保留/丢弃)、fetch / pull --ff-only / push(确认后);留下待提交的合并后,可在「更多操作 → 提交 → 中止合并」退出。 - 卡住时知道卡在哪:面板加载超过 2 秒会出现诊断条——分段进度(fetch / summary / stats / branches / log)、当前活动 git 子命令与已运行时长;宿主 2.5 秒不应答时提示「宿主无响应」,并可一键复制诊断 JSON。正常加载与后台轮询不显示诊断条。
- 输入框里就能看 Git:输入框工具条上有仓库与分支胶囊(着色的未提交 / 可拉取 / 待推送计数),点击弹出可搜索的切换器——仓库按名称/路径过滤,分支按
/折成文件夹树(fix/xxx一眼看清),输入即滤、方向键 + Enter 可选;多仓库工作区两边都能切,切换与面板实时联动,设置里可关(默认开);选择器里还有「打开其他仓库…」,输入绝对路径即可把工作区外的仓库加入并按会话记住。切到新会话也不用等——插件会在你点开会话时就预热首屏数据,面板秒开。
效果
> 下面这些图取自一个只装了两个插件(dsh-better-sidebar + 本插件)的干净 DSH,绑定在一个虚构的演示仓库上(见 scripts/demo-repo.mjs),画面里没有真实工作区、没有壁纸插件、也没有其它面板。
底部工作台(宽扁 → 三栏)左列是 IDEA 式动作条:按自身高度决定放几个按钮,放不下的收进 ⋯,末尾 ⚙ 可调顺序与显隐;中列是提交列表——列序与 IDEA 一致(日期 → 提交人 → 图谱 → 分支标签 → 提交信息),上方一排筛选(文本/哈希、分支或标签、提交人、日期、路径)与排序方向;右列是变更分组与提交框。
提交右键详情、复制修订号、签出该修订、在此新建分支、新建标签、优选(Cherry-Pick)、还原提交、重置到此(保留/丢弃更改)——破坏性项标红,菜单在面板内定位,底部工作台里同样能弹出来。
删除可撤回删除分支/贮藏是真删除,但宿主在动手前记下了对象 id:右下角浮窗点「撤回」即可恢复(一次性、30 分钟内有效);错过浮窗还有顶栏的「最近可撤回的操作」入口。删除 main/master 需要输入分支名确认。
动作条可配置拖动或用箭头调整顺序、眼睛图标逐项显隐,配置只存「排列 + 隐藏」并做过归一化,以后新增动作不会打坏旧配置。
提交详情完整提交信息、作者与日期、变更文件列表(带 +/− 行数),点文件看逐行 diff(行号 + hunk 高亮 + 红绿底)。
同一个注册,两种布局窄而高的原生右侧栏改用堆叠布局:动作条铺成顶部一行、变更在先、提交列表随后——面板只量自己的尺寸,从不猜自己在哪个容器里。截图顺序、演示仓库与干净环境都由 scripts/screenshots.mjs 复现。
右键发送到对话
面板里的一切都能右键塞进当前会话的输入框——走 DSH 官方的 composer 插入通道(不动你已输入的文字,追加在末尾;发送中或服务不在时自动退化为复制到剪贴板并提示,绝不死点击):
- 提交 →
git 提交 47ad017「提交标题」(仓库 xxx):短哈希 + 提交信息 + 仓库,一段话指名一个修订; - 分支 →
git 分支 main(仓库 xxx); - 文件(变更列表与提交详情的文件行)→ 一个
@路径文件引用 chip(DSH 原生 @ 语法,含空格的路径自动加引号),或者只发文件路径; - diff 选中行:在提交详情或工作区变更打开的 diff 窗里选中一段文本再右键 → 「发送选中行到对话」:
@文件chip + 行号说明——提交场景是「第 N–M 行(提交 47ad017「标题」@ 当前分支)」,工作区场景是「第 N–M 行(工作区已暂存 / 未提交)」。行号由选区所在的 diff 行按 hunk 头换算成新文件行号;选中的全是删除行时用旧号并标注「旧行号」。选区落不到可定位的 diff 行上时,菜单退化为「发送选中片段到对话」(原文截断 600 字符),不编造行号;菜单里同时有「复制选中引用」。没有选区时右键保持浏览器默认菜单。
配套已经就位的几件事:变更文件行与详情文件行的行首图标按扩展名着色(DSH 自家 FileTypeIcon);diff 预览用 DSH 自家 DiffBlock 组件渲染(红绿底、复制 / 换行工具栏,视觉与宿主一致);diff 窗高度可拖拽调节并按位置记忆;整个面板还可以挂进主对话区——「对话 / 轨迹」旁的 Git 标签页,插件设置里可关。
挂在哪里:两个宿主,一个面板
本插件只注册一次,落到哪个面上由宿主决定,两条通道互斥:
| 宿主 | 条件 | 你得到什么 |
|---|---|---|
| dsh-better-sidebar(底座,可选) | 装了它 | 它的 Tab 系统:右侧栏里的原生 Tab 加上底部工作台;它的设置页 侧边卡片 里能看到本插件的卡片 |
| DSH 原生右侧栏 | 没装底座时自动接管 | 右侧栏 Guide 页里的 Git 胶囊 → 点开就是同一个面板 |
| 主对话区标签页(v0.13.0 起) | 总是可用(可在设置里关闭) | 会话顶部「对话 / 轨迹」旁多一枚 Git 标签,点它整块主对话区变成 Git 工具窗口;开关在插件设置 →「面板放置」 |
底座在场时以它为准(它还带底部工作台);底座晚到会顶掉原生注册再挂到它那边。所以只装本插件也能用,没有任何前置要求。
同一个面板会出现在形态完全不同的面上,所以布局靠量而不是猜:
| 面 | 形态 | 本插件的布局 |
|---|---|---|
| 右侧栏(原生的,或底座桥接过来的) | 窄而高 | stack:变更区在上,下方是「历史 / 差异」双页签(点变更文件自动切到差异),分支树可收起 |
| 底部工作台(底座自有) | 宽而扁 | columns:分支树 · 提交图谱 · 变更与提交框,三栏并排——就是 JetBrains Git 工具窗口的样子 |
| 侧栏被拖得很窄(< 400px) | 窄 | compact:变更列表在上,下方是「历史 / 差异」双页签,分支树可收起 |
插件不猜自己在哪儿,而是用 ResizeObserver 量自己的容器:宽 ≥ 600px 且宽 ≥ 高 × 1.15 走三栏,宽 < 400px 走紧凑页签,其余走纵向堆叠(宽度说了算,高度没有否决权);两种纵向布局都把「历史 / 差异」做成页签,点变更文件自动切到差异。自由浮窗、移动端抽屉同样自适应。
功能一览
| 区域 | 能力 |
|---|---|
| 动作条 | IDEA 式左侧竖排(底部工作台)/ 顶栏下一行横排(右侧栏):刷新、新建分支、签出、删除、比较、显示差异、贮藏、新建标签、收藏、抓取、拉取、推送。按可用空间自动决定放几个,放不下的收进 ⋯ 更多;末尾 ⚙ 设置 可拖动排序、逐项显隐(存进插件行 Config 的每个动作布尔 + railOrder;空串表示默认顺序)。每个按钮按当前状态点亮/置灰(没有其他分支就不能删除/签出/比较,没有远程就不能抓取/推送,没有上游就不能拉取,没有变更就没有差异可看) |
| 窄栏页签 | 宽度 < 600px 的两种纵向布局里:变更列表固定在上方,下方是「历史 / 差异」两个页签——点变更文件自动切到「差异」,历史列表与它的滚动位置都不再被顶走;两区之间的分隔条可拖动、双击复位(尺寸与 dsh-ide-git.panes.v1 其它面板同一份存储) |
| 悬停提示 | 鼠标停在图标按钮上 120ms,指针旁弹出它的操作名——竖排动作条里在图标右侧(跟着该行垂直居中,贴窗口右缘时翻到左侧),其余在下方;置灰的动作连原因一起给出(如 隐藏 · 当前状态不可用)。提示卡挂在窗口层,底部工作台裁不到;扫过一排图标不闪,按住鼠标拖拽 / 滚动 / 缩放时立即收起 |
| 状态行 | 当前分支、上游、↑ahead ↓behind、stash 数量、忙碌指示 |
| 输入框状态条 | 宿主输入框工具条里的仓库/分支胶囊(着色 ±未提交 / ↓可拉取 / ↑待推送),点击切换仓库与分支,与面板双向联动;单仓库默认只切分支,多仓库两边都切,手动入口可打开工作区外的仓库;设置可关(默认开) |
| 仓库/分支切换器 | 面板顶部与输入框胶囊共用同一个可搜索选择器:仓库按名称、路径、克隆目录或当前分支过滤,并标出各仓当前分支;分支按 / 折成文件夹树,输入时自动展开命中的目录,方向键 + Enter 可选,过滤器为空时目录可手动折叠。列表底部可手动输入绝对路径打开工作区外的仓库,按会话记住最近 8 条 |
| 分支树 | HEAD / 本地 / 远程 / 标签 分组(可折叠)、过滤框、星标当前分支、ahead/behind 角标、worktree 占用标记;本地蓝 / 远程紫 / 标签黄 / HEAD 绿 |
| 工作树 | 动作条新增「工作树」视图:列出主工作树与全部链接工作树(当前 / 主工作树 / 已锁定 / 可清理标记、分支、短 HEAD、路径),可新建(新分支或挂已有分支,可指定起点)、在面板中打开、复制路径、移除(有未提交改动需二次强制确认)、清理失效记录;与官方「变更请求」面板并存 |
| 分支右键 | 签出、将当前分支变基到此、合并到当前分支(对话框可选默认 / 保留分支 / 压缩 / 不提交)、与当前分支比较、从该分支新建分支、重命名、删除(当前分支禁用)、更新(Fetch)、推送、发送到对话(分支名 + 仓库) |
| 历史筛选 | 范围(当前分支 / 全部分支 / 任意本地或远程分支)、文本或哈希、分支或标签、提交人、日期(今天 / 近 7 天 / 近 30 天 / 今年),外加排序方向(新→旧 / 旧→新)与一键清除;范围由 git 服务端换日志起点(--branches --remotes 或指定 ref),路径筛选回车后由 git 服务端过滤(git log -- ) |
| 提交列表 | 列序对齐 IDEA:日期 → 提交人 → 图谱 → 分支标签 → 提交信息;lane 拓扑图整格连线(相邻行像素对齐)、HEAD 空心点、refs 徽章(HEAD 绿 / 本地蓝 / 远程紫 / 标签黄,最多 3 个 + +n)、加载更多/无限滚动(每页 120)、三列表框选批量选中;日期列默认相对时间(如 4h),可在插件设置 →「历史列表」切换绝对时间(同年 MM-DD HH:mm,跨年 YYYY/MM/DD HH:mm;悬停显示另一种) |
| 提交右键 | 提交详情、复制修订号、签出该修订(确认)、在此新建分支、新建标签、cherry-pick、还原提交、重置到此(保留 / 丢弃更改)、发送到对话(短哈希 + 提交信息 + 仓库) |
| 提交详情 | 完整提交信息、作者/日期、变更文件列表(+/−),点文件看逐行 diff |
| diff 窗 | 内嵌逐行 diff(红绿底 + 左右分栏 / 自动换行开关 + 复制工具栏)、高度可拖拽调节并按位置记忆;默认在面板内打开,装了 dsh-better-sidebar 或原生预览座位也不会被顶掉——设置卡「面板放置」里可关掉「在面板内预览差异」,交回侧边栏
Compare in this category
The five most-starred plugins in the same category.
| Plugin | Author | Stars | Version | Updated |
|---|---|---|---|---|
| open-design | nexu-io | 106.9K | 0.25.1 | 2026-11-10 |
| huashu-design | alchaincyf | 29.1K | 3.3.0 | 2026-11-10 |
| dsh-web | zhu1090093659 | 10.3K | 0.0.1 | 2026-11-10 |
| baoyu-design | JimLiu | 6.3K | 2.12.2 | 2026-11-10 |
| dsh-wallpaper-engine | elysia395 | 6.3K | 1.4.2 | 2026-11-10 |