前言¶
DeepSeek Harness(DSH)新建会话时,你可以选工作区和 Agent 模式,但对话默认从当前工作区目录、当前已检出的分支开始。并行让多个智能体改不同分支时,往往要先手动切分支、stash,或自己建 worktree,再开新会话。
dsh-branch-worktree 是 DSH 的 Web UI 客户端插件,在「新建会话」那一行的工作区与 Agent 模式芯片之间增加「分支 / worktree」选择,用一次点击完成分支选择(或新建)与隔离检出,会话在独立 worktree 里启动,主工作副本里未提交的改动不会被碰动。
这是什么¶
维护者 elfgzp 在 GitHub 开源的 dsh-branch-worktree(package 版本 1.1.1,MIT 许可证)。它面向已在 DSH 里用 Git 仓库作工作区的开发者:把「选分支 + 是否 worktree」收进 New Session 界面,而不是在终端里重复 git worktree add。
社区目录页:skillhub.cn/plugins/elfgzp/dsh-branch-worktree。目录站点与 DeepSeek / 幻方无官方从属关系;DSH 生态本身是「一切皆插件」,第三方插件需自行审源码与许可证后再安装。
核心功能¶
新建会话那一行的顺序是:项目 → 分支 → 模式,与决策顺序一致。分支控件以下拉面板打开,不是模态框,后面的输入区仍可见可用。
| 控件 | 来源 |
|---|---|
| 工作区 / 项目 | DSH 内置 |
| Agent 模式(如 Creator) | DSH 内置 |
| 分支,或新分支 + 基准 | 本插件 |
| 自动 worktree | 本插件 |
主要行为(与 README 一致):
- 默认自动命名:worktree 开关默认开启,面板打开即可直接「Start here」;插件会生成分支名与 worktree 目录名并在 Will create 里预览,创建结果与预览一致。未输入可用草稿时用时间戳(如
wt/20261103-153102);草稿来自已输入但未发送的提示词(英文类文本会 slug 化到wt/…命名空间,非 ASCII 草稿不转写,回退时间戳)。重名会自动加后缀。 - 手动选分支:关闭 Auto name 后,可选已有分支或在 New branch 里输入新名,并选 based on(默认仓库默认分支)。新分支从所选基准创建;已有分支复用,不重复创建。
- 两种模式:Create a worktree(默认)在
<repo>/.worktrees/<branch>下执行git worktree add,将该目录注册为 DSH 工作区并在其中开会话;Switch in place 在当前检出里git checkout,工作树 dirty 时会拒绝,避免覆盖未提交改动。 - 已在其他 worktree 检出的分支在列表里显示为
in use并禁用(Git 不允许同一分支检出两次)。若该分支已在主工作副本检出,开启 worktree 模式时会被明确拒绝(不会再把主副本当作「复用 worktree」)。 - 首次运行会把
.worktrees/写入.git/info/exclude,worktree 池不会污染git status。 - 未发送的草稿会带进新会话,并参与自动命名。
- 当前工作区不是 Git 仓库时,分支芯片隐藏;切回仓库工作区后恢复。
worktree 目录布局示例:
my-repo/
├── .git/
├── .worktrees/
│ ├── feature-login/ ← branch feature/login
│ └── fix-crash/ ← branch fix/crash
└── ... 主检出,不被改动
「Create worktree」不等于「一定新建分支」:自动命名会 git worktree add -b 建新分支;手动给的新名字同样 -b;已有分支则 git worktree add <path> <branch> 只加 worktree。
安装与启用¶
依赖:DSH >= 0.2.0,且系统 PATH 上有 git。
通过 Web UI(推荐)¶
- 侧栏 → Plugins → Add plugin → Install a third-party plugin。
- 粘贴仓库地址并确认:
https://github.com/elfgzp/dsh-branch-worktree
- 在 Installed plugins 里打开 Branch & Worktree。若界面未立即出现,重启 DSH。
让 Agent 安装¶
在已启用 plugin-manager 工具的会话(Creator 模式可用)中说:
从 https://github.com/elfgzp/dsh-branch-worktree 安装这个插件并启用
Agent 会通过 plugin_manager 的 install_bundle 写入 profile 依赖、更新 dsh.profile.bundles 并激活。
注意¶
插件以当前 DSH 进程权限运行;安装前请阅读仓库源码与 MIT 许可证。不要手改 profile 的 package.json 或 cordis.patch.yml,以免与 plugin manager 管理的 bundle 列表不同步。
典型用法¶
- 点击 New Session。
- 选择工作区,再点中间 branch chip。
- 默认可直接 Start here(自动命名 + worktree 均已开启)。
- 若要自己命名:关闭 Auto name,选已有分支或输入 New branch,必要时选 based on。
- Start here(或在名称框按 Enter)。
会话在结果目录打开,侧栏工作区会以分支名显示。
适用场景与注意¶
适合:同一仓库上并行多个 DSH 会话、每个会话对应不同分支,且希望主目录保持当前分支与未提交改动不动。
不适合或需知:非 Git 工作区无此芯片;必须在 dirty 时原地切分支请先用 stash 或 commit,或保持 worktree 模式;已在别处检出的分支无法再次选中。
结尾¶
dsh-branch-worktree 把 New Session 上缺失的「分支 + 隔离检出」补成一行里的一个芯片,默认零输入即可按草稿或时间戳开 wt 分支并在 .worktrees/ 下开会话。详情与截图见 GitHub README;社区条目见 目录页,源码见 https://github.com/elfgzp/dsh-branch-worktree。