dsh-branch-worktree: Select a branch in a new session and automatically enter the Git worktree

前言

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(推荐)

  1. 侧栏 → Plugins → Add plugin → Install a third-party plugin。
  2. 粘贴仓库地址并确认:
https://github.com/elfgzp/dsh-branch-worktree
  1. 在 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 列表不同步。

典型用法

  1. 点击 New Session。
  2. 选择工作区,再点中间 branch chip。
  3. 默认可直接 Start here(自动命名 + worktree 均已开启)。
  4. 若要自己命名:关闭 Auto name,选已有分支或输入 New branch,必要时选 based on。
  5. 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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye