READMESource: master@87292094
Git Workbench
DSH Web GUI 的 Git 面板:侧边栏一个入口,管理当前项目的本地更改、提交历史和同步。 跟随当前项目,只用主题 token(明暗主题都成立),中英双语。

图:全部分支 视图(git log --all)下的提交历史 —— 左侧分支树(全部分支 / 本地 / 远程 / 标签)、
中间图谱与提交表、右侧选中提交的详情,以及提交行的右键菜单。
安装
plugin_manager action: install_bundle target: D:\Dev\language\ai\harness\git-workbench
装好后侧边栏出现 Git 图标。改过客户端代码后刷新一次页面。
项目
- 自动跟随:打开面板就是当前会话所属项目(session 作用域 slot 返回
sessionId,再映射到工作区路径),切会话即换仓库 - 切换器:列出全部工作区(标注是否 Git 仓库)、选目录、输入路径
- 项目不是仓库时给「创建 Git 仓库」(
git init);空仓库也能读出分支名
本地更改
- 左「已暂存 / 未暂存」目录树:分层、折叠、文件夹级
+/−、全部折叠 / 展开 - 右统一 diff,每个 hunk 可单独
暂存此块/取消暂存此块 - 文件行
+暂存、−取消暂存、↺丢弃(需确认;未跟踪文件走git clean) - 提交框:
Ctrl/Cmd+Enter直接提交、提交全部更改(-a)、修正上次提交(--amend);高度可上下拖动,双击复位
提交历史
- 左侧筛选:
全部分支(git log --all)/ 本地 / 远程 / 标签;双击本地分支即 checkout,+新建分支 - 提交表:图谱泳道、搜索、
↑/↓选择 - 右键菜单:复制提交号 / 复制信息 / 检出此提交 / 还原 / 拣选 / 变基到此 / 回退到此
- 详情栏:完整信息、作者、日期、父提交、变更文件;底部同一组操作
同步
- 顶部
获取/拉取/推送 - 推送面板:选远程、
添加远程(名称 + URL 或本地路径)、设置上游(push -u)
界面
- 左右栏宽和提交框高度都可拖:分隔区不画线,只有指针变化(
col-resize/row-resize);双击复位,方向键微调,尺寸存在localStorage - 危险操作先确认(丢弃、检出提交、还原、拣选、变基、回退);提交不弹窗
- 执行结果和 git 报错显示在面板内提示条
结构
| 文件 | 说明 |
|---|---|
index.js |
Host:路由、CSRF 头校验、动作分发 |
git.js |
git 读写:log / refs / status / diff、hunk 拆分与 git apply、动作执行 |
client.js |
Browser:侧边栏入口 + 主面板(React,无 JSX、无构建) |
cordis.patch.yml、locale/*.json、icon.svg |
插件行、文案、图标 |
接口
GET /git-workbench/state?repo=&rev=&limit=
GET /git-workbench/commit?repo=&sha=
GET /git-workbench/worktree?repo=
GET /git-workbench/diff?repo=&path=&staged=1&untracked=1
GET /git-workbench/remotes?repo=
POST /git-workbench/action # 需请求头 x-git-workbench: 1
GET /git-workbench/health
action:init、stage、unstage、discard、commit、fetch、pull、push、checkout、createBranch、
revert、cherryPick、reset、rebase、stageHunk、unstageHunk、addRemote。
push接受remote/branch/setUpstream,不带remote时等价git push- 缺
x-git-workbench头 → 403;坏路径 / 分支名 / 提交号 / 远程名 / URL 分别返回bad-paths、bad-branch、bad-sha、bad-remote、bad-url - 所有参数以 argv 传给
git(不经 shell),GIT_TERMINAL_PROMPT=0让缺凭据时快速失败
配置(可选)
- id: git-workbench
name: '@local/git-workbench'
config:
repo: 'D:\path\to\repo'
limit: 300
已验证
- 空仓库:
init、stage→unstage(无 HEAD 走git rm --cached)、discard、分支名读取 - 逐块暂存:两次改动拆成 2 个 hunk,
stageHunk 0后--staged只剩 1 个 hunk - 提交级动作:
revert/reset --hard/cherryPick/rebase/createBranch - 远程:
addRemote→remotes返回 origin →push -u成功(main -> main,upstream 变为origin/main) - 输入校验、CSRF 403、目录树构建、模型字段引用、语言包键对齐、语法解析
未验证:面板视觉效果(无浏览器控制);对真实托管平台(GitHub 等)的推送(需凭据,本地 bare 仓库已跑通)。
已知限制
- 没有 stash、remote 管理、标签创建、交互式 rebase
- 暂存粒度到 hunk,未做行级选择
- 冲突后需在终端处理
- 提交列表未做虚拟滚动(默认最多 400 行)
No comments yet. Be the first to write one.