メインコンテンツへスキップ
G

dsh-git4idea

guojinpeng/dsh-git4idea

IDEA-style Git tool window for DSH: branch tree with ahead/behind badges, commit graph with text/branch/author/date/path filters, staged and unstaged changes with a commit box, commit details with per-file line diff, stash and worktree management, a git console log, and AI commit-message drafting. Fork of KannaKuron/dsh-ide-git (MIT), reworked to register native DSH entries instead of depending on dsh-better-sidebar and extended with worktree management, undo for branch, stash and discard actions, a git console log and AI commit-message drafting. Its plugin, route and sidebar-tab ids differ from the upstream, so both can be installed, but you get two Git tool windows.

インストール

dsh plugin --profile web add github:guojinpeng/dsh-git4idea

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、收藏。放不下的动词收进“更多”。

变更与提交

  • 分组显示已暂存、未暂存、未跟踪和冲突文件;可显示被忽略的文件。
  • 支持单文件、多选或全部暂存、取消暂存、丢弃。
  • 文件可按平铺或目录分组,可全部展开或折叠。
  • 提交框支持提交、修正上一次提交、提交并推送。
  • AI 写提交信息:跟随当前会话的模型路由;会话没有模型时使用宿主服务的第一个模型。可选择中文或英文。覆盖已输入的草稿前会确认,并支持撤销。

历史与详情

  • 提交图谱显示 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 未结束时,分支级操作会被阻止并给出提示。

布局与反馈

  • 宽面板为三栏:分支树占 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.。

関連プラグイン