dsh-git4idea
Verified@guojinpeng/dsh-git4idea · v0.4.2 · MIT · Web UI
DSH 插件。它在 DeepSeek Harness 中提供一个 IDE 风格的 Git 工具窗口:分支树、提交图谱、变更与暂存、提交详情、差异视图、控制台和工作树。
Install
dsh plugin add @guojinpeng/dsh-git4idea Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Readme
@guojinpeng/dsh-git4idea
DSH 插件。它在 DeepSeek Harness 中提供一个 IDE 风格的 Git 工具窗口:分支树、提交图谱、变更与暂存、提交详情、差异视图、控制台和工作树。
入口
- 会话标签行:在“对话 / 轨迹”旁增加 Git 页。该页常开。
- 输入框分支胶囊:显示当前分支。点击后打开分支选择器,可切分支、fetch、提交、推送或新建分支。在终端或外部 IDE 切换分支后,胶囊约 2.5 秒内更新。
- 右侧栏:注册 Git 主面板和 Git 预览页。启动时不自动打开。差异视图找不到浮窗位置时,回退到预览页。
- 会话页浮窗:提交、推送和单文件 diff 在会话页中央打开,不切换页面。
仓库
插件自动查找当前工作区、嵌套仓库和子模块。子模块可以作为独立仓库打开。
- 目录扫描深度为 2,跳过依赖与构建目录。
- 仓库列表最多 60 项。
- 扫描结果缓存 15 秒。
- 未初始化的子模块不显示。
分支树
- 分组:HEAD、本地、远程、标签、收藏。
- 每行显示 ahead/behind、上游和 worktree 占用标记。
- 支持过滤、折叠、多选、复制名称/哈希/路径,以及批量删除引用和 cherry-pick。
- 行菜单提供签出、从此新建、合并到当前分支、当前分支变基到此、与当前分支比较、发送到对话、收藏、设置/取消上游、创建跟踪分支、重命名、删除、更新和推送。
- 动作条默认十个动词:收起分支栏、新建分支、拉取、删除、比较、fetch、收藏、从远程刷新、全部展开、全部收起。放不下的动词收进“更多”。
- “从远程刷新”先 fetch 再重取全部数据,打开的提交详情和 diff 也一并重取。
- “全部展开/全部收起”折叠或展开本地、远程、标签、收藏各节及其目录。
- 远程分支默认收起。
变更与提交
- 分组显示已暂存、未暂存、未跟踪和冲突文件;可显示被忽略的文件。
- 支持单文件、多选或全部暂存、取消暂存、丢弃。
- 文件可按平铺或目录分组,可全部展开或折叠。
- 提交框支持提交、修正上一次提交、提交并推送。
- AI 写提交信息:跟随当前会话的模型路由;会话没有模型时使用宿主服务的第一个模型。可选择中文或英文。覆盖已输入的草稿前会确认,并支持撤销。
- 冲突总览:合并、变基、拣选或还原遇到冲突时自动打开,也可点操作条的“继续”、会话页胶囊的“>>”或冲突行菜单打开。列出未解决的文件,每行可按侧“接受”,也可双击进入冲突卡手动解决;全部解决后点“接受并完成”结束合并、变基、拣选或还原。
- 标题下方写明来源分支与目标分支,例如“将分支 feat 合并到分支 main”。
- 冲突卡:双击冲突文件打开,排成 IDEA 风格的三栏。左栏是当前分支的版本,中栏是合并结果,右栏是合并进来的分支;三栏在纵向和横向一起滚动,左右两栏底部始终显示横向滚动条。左右两栏只读,中栏始终可以直接编辑。
- 工具栏是“应用不冲突的更改”:
> 左侧、>< 所有、< 右侧只把该侧或两侧不冲突的改动放进结果。 - 冲突块用底色标出,不显示
<<<<<<<等标记线。冲突块第一行的两侧各有“采用”和“丢弃”按钮:左侧是× »,右侧是« ×。采用把该侧文字放进中栏,丢弃放弃该侧文字。该侧做过任一选择后,这一侧的两个按钮都隐藏。未做选择时,中栏保留这一处的共同基线,打开时不会丢行。 - 两侧都采用时,中栏先放左栏的行,再放右栏的行。中栏不显示按钮。
- 撤销和重做覆盖工具栏、逐块选择和整文件采用;快捷键 Ctrl+Z、Ctrl+Shift+Z(Ctrl+Y 也可),macOS 用 Cmd。中栏文本里同样走这套历史,不用浏览器自带的撤销。
- 左栏行号贴在左栏右侧,右栏行号在左;中栏自带行号,随文本一起滚动。
- 在任一栏的行号区右键,选“使用 Git 追溯注解”,该栏在行号旁显示每行的提交日期和作者,作者只显示简称(名字中 @ 之前的部分);把鼠标移到作者名上,浮出该次提交的短哈希、作者全名与邮箱、日期和时间,有提交信息时再显示提交信息首行;未提交的行显示“今天”和当前 git 用户。带采用/丢弃按钮的行让出位置,不显示注解。再选一次“隐藏 Git 追溯注解”可收起。中栏文本改动后,中栏的注解自动清除。
- “上一处”“下一处”把三栏一起滚动到冲突块。全部冲突处理完会提示“所有更改均已处理”。
- 保存只写工作区,不暂存;点“标记已解决”才执行
git add,该侧删除了文件时执行git rm。 - 二进制文件和超过 256 KiB 的文件只读,只能整文件采用一侧或标记已解决。
- 某一侧没有文件版本时(两边都新增同一文件,或一边删除、一边修改),三栏视图不可用,中栏按纯文本编辑。
- 工具栏是“应用不冲突的更改”:
历史与详情
- 提交图谱显示 lane 拓扑和 ref 徽章,支持无限滚动。鼠标移到提交列表上只改变行背景,不改变分支线的亮度。
- 可按文本或哈希、分支、用户、日期、路径过滤,并切换升序/降序。
- 提交详情显示作者“名字 <邮箱>”、日期、完整说明、变更文件和逐行差异。合并提交与第一父比较。
- 可多选提交执行 cherry-pick。
- 提交菜单提供签出、在此新建分支、在此新建标签、cherry-pick、还原、软/硬重置、复制哈希、查看详情和比较。
差异视图
- 单栏或左右对比。
- 自动换行、复制全文、二进制提示、截断提示。
- hunk 与行高亮,双列行号。
- 可选中行发送到对话,或复制引用。
提交、推送与更多操作
- 提交并推送分两步:提交成功后打开推送窗,推送成功后关闭。任一步失败都停在当前卡片,并说明原因。
- 推送窗左侧列出本次提交;选中提交后,右侧列出变更文件。双击文件打开差异卡。没有上游时自动设置上游。
- 更多菜单包含:
- 提交:提交已暂存、全部提交、修正、签收、撤销上次提交。
- 更改:放弃全部更改。
- 拉取与推送:同步、同步变基、拉取变基、从远程拉取、强制推送、推送到远程、发布分支、从所有远程抓取、推送标签。
- 分支:设置或取消当前分支上游、中止当前操作。
- 远程:添加或删除远程、删除远程分支。
- 存储:贮藏已跟踪或已暂存文件,应用、弹出或删除任意贮藏,清空贮藏。
- 标记:删除本地或远程标签、推送标签。
- 其他:克隆仓库、切换排序方式。
工作树
- 左侧提供新建、删除和刷新。
- 列表显示名称、分支和路径;当前工作树带勾。
- 新建时可选基础分支、是否创建新分支、项目名称和位置,并实时显示目标路径。
- 创建后不切换当前仓库。
- 不能删除当前工作树。
控制台
- 显示
~/.dsh/guojinpeng/dsh-git4idea/log/console.log的尾部 256 KiB,最多绘制 2000 行。 - 每条 git 命令记录命令行、标准输出和标准错误,时间戳使用北京时间。
- 只在控制台可见或 git 操作结束后刷新,不轮询。
- 文件超过 5 MB 时轮转为
console.log.1。 - 右键菜单只有“全部清空日志”,点击后立即清空,不确认。
安全与恢复
- 破坏性操作需要确认。
- 删除主分支需要输入分支名。
- 强制推送使用
--force-with-lease。 - 分支删除、贮藏删除和丢弃更改进入撤回浮窗,可从通知中的“撤回”恢复。
- 合并、变基、cherry-pick、还原或 bisect 未结束时,分支级操作会被阻止并给出提示。
- 操作条显示当前的合并、变基、拣选或还原,并提供“继续”;变基、拣选和还原还可“跳过”;随时可“中止”。继续前若有未解决的冲突,打开冲突总览而不是直接执行 git。
- 会话页的分支胶囊在有未结束操作时改为操作态:警告图标、操作文字(合并时显示“来源 → 目标”)、打开总览的“>>”和中止的“×”。
布局与反馈
- 宽面板为三栏:分支树占 1/5,提交列表占剩余空间,提交详情占 2/5。详情区上方 2/3 为变更文件,下方 1/3 为提交说明。
- 窄面板使用纵向堆叠;短面板使用“变更/历史”分段切换和可折叠分支树。
- 分隔条可拖动,双击复位,方向键微调。尺寸按面板形态保存。
- git 结果和异常显示在右下角通知。默认 5 秒消失;悬停暂停计时,移开后重新计时。通知默认折成 2 行,悬停展开,长内容可滚动。
语言
- 内置中文和英文。
- 其它语言标签回退到英文。
安装
dsh plugin --profile web add -w @guojinpeng/dsh-git4idea
将 web 替换为你使用的 profile 名称。包内的 cordis.patch.yml 会并入 profile,不需要手写挂载行。宿主半改动后重启 dsh web;客户端半改动后刷新页面。
配置
没有设置页。面板自动保存以下状态:
- 分支树展开状态
- 每个会话选中的仓库
- 收藏的分支
- 动作条布局
- 分栏尺寸
- 行内差异偏好
保存位置:~/.dsh/guojinpeng/dsh-git4idea/config/settings.json。
| 行为 | 默认值 |
|---|---|
| 会话标签行的 Git 页 | 常开 |
| 输入框分支胶囊 | 常显 |
| 动作条 | 七个默认动词 |
| AI 写提交信息 | 跟随会话模型路由;无会话模型时用宿主第一个模型 |
开发
宿主半入口是 src/index.js。客户端半拆成 src/client/*.js 片段,由 src/utils/build-client.js 按固定顺序拼成 src/client.js。客户端只能加载平台基线模块,片段之间不能互相 import。
npm test # smoke + api + graph + repos
npm run build:client # 修改 src/client/*.js 后重建 src/client.js
npm run build:check # 只校验生成文件是否一致
npm run i18n # 同步 locale/*.json 到内联字典并重建
npm run i18n:check # 只校验,不写文件
文案来源是 locale/zh.json 与 locale/en.json 的 messages。客户端运行时不能读取 JSON 文件,因此 src/utils/i18n.js 会把它们写入 src/client/locale.js 的生成块。
许可
MIT。原始实现版权归 KannaKuron,见 LICENSE。
图标路径数据取自 IntelliJ Platform,Apache License 2.0,版权归 JetBrains s.r.o.。