dsh-worktree
DSH(DeepSeek Harness)的 git worktree 插件:像 fork 一样,为任意工作区 / 会话创建隔离的 git worktree(独立分支),并把新会话绑定到该 worktree 打开——「创建 → 使用 → 删除」完整闭环,互不干扰地并行推进多个任务。
目录
它能做什么
dsh-worktree 为 DSH 提供三条工作区 / 会话菜单操作,覆盖「创建 → 使用 → 删除」的完整闭环:
创建 Worktree(独立工作空间)
从任意工作区一键创建:
- 独立分支 + 独立目录:基于当前仓库新建一个 git worktree(自动创建独立分支), 新工作区出现在侧栏;
- 自动打开空会话:创建后自动打开一个新会话,cwd 指向新 worktree——从此在该 会话中做的所有操作都发生在独立分支上,与主工作区完全隔离;
- 主工作区零干扰:worktree 目录放在仓库外层的
<仓库名>.Worktree/容器里, 不进入仓库、不触碰.git,主工作区的git status保持干净。
删除 Worktree(清理不再需要的分支)
在插件创建出来的 worktree 工作区上,菜单会多出一行「删除 Worktree」:
- 一键彻底拆除:强制删除 worktree 目录、对应分支,并移除工作区登记, 侧栏条目随即消失;
- 安全护栏:该操作只对插件容器内的 git worktree 工作区显示——普通工作区 看不到这一行,绝无可能误删主仓库;
- 自动收尾:如果这是最后一个 worktree,整个
<仓库名>.Worktree/容器目录会一并移除。
分叉到 Worktree(带着全部上下文继续)
在任意会话中一键完成「建 worktree + 分叉会话」:
- 完整继承对话历史:新会话继承当前会话的全部对话,cwd 指向新 worktree;
- 延续模型与预设:继承当前会话使用的 preset 与模型设置,无需重新配置;
- 适合的场景:主分支改到一半想另开一条线试新方案、或让一个任务的分支独立于 主线推进——子会话在独立分支上工作,随时可回到主会话继续。
其它亮点
- 即插即用:无需修改 DSH core,插件通过官方网关暴露接口、复用 DSH 公开服务, 升级 DSH 时无需跟随维护;
- 兼容性自动适配:优先使用新版 DSH 的原生菜单插槽,旧版构建自动降级为 DOM 注入适配器,两种构建开箱即用;
- 中文界面:菜单项与 DSH 内置条目一致采用中文,命名与同菜单现有条目保持对称。
菜单项一览
| 菜单位置 | 菜单项 | 图标 | 说明 |
|---|---|---|---|
| 工作区(文件夹)⋯ 菜单 | 「创建 Worktree」 | 复制副本 | 建 worktree + 空会话 |
| 工作区(文件夹)⋯ 菜单 | 「删除 Worktree」 | 垃圾桶(危险红) | 仅对插件创建的 worktree 工作区显示,强制拆除 |
| 会话 ⋯ 菜单 | 「分叉到 Worktree」 | 复制副本 | 建 worktree 并分叉会话,继承全部对话历史 |
安装
方式 A:本地目录(开发 / 自用)
# 在 dsh 的 web profile 目录里用 pnpm 安装(dsh plugin 即转发到 pnpm):
dsh plugin --profile web add file:D:/Documents/GitHub/dsh-plugins/dsh-worktree
安装完成后重启 dsh web 应用即可生效。
方式 B:GitHub 仓库
dsh plugin --profile web add github:Jiazliang/dsh-worktree
dsh plugin add 会自动完成包安装与 bundle 注册,重启 dsh web 应用后生效。
使用流程
典型场景:从主工作区分出一条独立开发线
- 在侧栏的某个工作区(文件夹)上打开 ⋯ 菜单,点击「创建 Worktree」;
- 侧栏出现新工作区,新会话自动打开,cwd 指向独立 worktree(独立分支);
- 在该会话中自由工作——修改、提交都只影响这个分支;
- 想带着当前对话上下文另起一条线?在会话 ⋯ 菜单点「分叉到 Worktree」, 子会话继承全部对话历史并落在新的 worktree 上;
- 任务完成、不再需要该分支时,在该 worktree 工作区的 ⋯ 菜单点「删除 Worktree」, 目录、分支、登记一并清除。
注意:「删除 Worktree」是破坏性操作——未提交的更改会随目录删除而丢弃, 但会话日志会保留(与 DSH 原生「删除工作区」一致,会话落入"未分组")。
卸载
# 在 dsh 的 web profile 目录执行:
pnpm remove dsh-worktree
常见问题
为什么我的主仓库工作区看不到「删除 Worktree」? 这是设计使然——该操作仅对插件创建出来的 git worktree 工作区显示,普通工作区 永远不会出现这一行,从根源上杜绝误删主仓库。
「创建 Worktree」提示不是 git 仓库? 创建需要目标工作区是 git 仓库(能从 cwd 解析出仓库根)。非仓库目录会给出报错提示。
创建后新会话在哪里工作? 新会话的 cwd 指向仓库外层的
<仓库名>.Worktree/<id>目录,处于独立分支上, 与主工作区完全隔离。「删除 Worktree」后会话还在吗? 在。会话日志不会删除(DSH 无会话删除 API),与原生「删除工作区」行为一致。
贡献
欢迎提交 Issue 与 PR!
- 报告问题:请描述复现步骤、DSH 版本、插件版本以及浏览器控制台报错;
- 提交代码:请先通过自检
pnpm check && pnpm verify,保持命名对称、零 core 包改动等既有设计约束; - 提交信息:遵循仓库现有的 conventional commits 风格。
许可证
MIT © dsh-worktree contributors
还没有评论,来写第一条。