前言¶
用 DSH 做开发时,经常要同时处理同一个项目的多个分支:主线留在 main,另开一个分支做功能,再开一个分支修线上问题。Git worktree 本身能解决这个痛点——同一仓库的多个分支各自检出到不同目录——但用命令行操作要自己记路径、记参数,路径散落在磁盘各处也不好管理。下面介绍的 dsh-worktrees 把这件事搬进了 DSH 的设置面板。
这是什么¶
dsh-worktrees 是 lwklbb 维护的一个 DSH 插件,MIT 许可证,当前版本 0.1.0。定位一句话可以说完:在 DSH 设置面板中集中管理 Git worktree——扫描工作区里的 Git 仓库,创建 worktree 并可加入 DSH 工作区,支持打开目录、删除与 prune。
作者在 README 里给出的动机是:在 DSH 里同时处理同一个项目的多个分支,比如 main 留主线,feature/order-export 做功能开发,fix/login-redirect 修线上问题,不用来回 stash、频繁切分支。
核心功能¶
设置入口与仓库扫描¶
安装后,DSH 设置面板会多出一个 Worktrees 选项。实现上通过 settings.section slot 挂载,id 为 worktrees。
页面会读取当前 DSH Workspaces 并扫描:
- 识别每个 workspace 是否属于 Git 仓库;
- 同一个仓库被多个 workspace 命中时,只保留一份;
- 展示仓库根目录、已有 worktree 数量、分支数量。
非 Git 目录会静默忽略,不会报错;Git 未安装或不在 PATH 中时,页面会提示 Git 不可用。
Worktree 列表¶
选中一个仓库后,列表展示每个 worktree 的:目录名、完整路径、当前分支、是否 detached、是否主 worktree、clean/changed 状态、ahead/behind 信息、是否已加入 DSH 工作区。
创建 worktree¶
创建区支持三种模式,先选模式,再填目录名和分支/起点:
- 新分支:执行
git worktree add -b,从指定起点创建新分支; - 已有分支/引用:执行
git worktree add,把已有分支 checkout 到单独目录; - Detach:执行
git worktree add --detach,临时查看某个 commit、tag 或远端引用,不创建本地分支。
不填分支名时,用目录名作为分支名。
创建后加入 DSH 工作区¶
创建表单默认勾选「创建后加入 DSH 工作区」。创建成功后,插件调用 DSH 的 workspace 接口,把新目录加进左侧工作区,可以直接打开;只想创建 Git worktree、不想加入 DSH 的话,取消勾选即可。
打开、删除与 prune¶
每个 worktree 都有「打开」按钮,通过 DSH 的 openPath 打开对应目录。
删除只允许非主 worktree,走 Git 自带命令:
git worktree remove <path>
默认不带 --force,worktree 里有未提交改动时 Git 会拒绝;确要删除就勾选「强制删除」。主 worktree 不允许删除。
Prune 按钮执行:
git worktree prune
用于清理已经不存在的 worktree 记录。
安装与启用¶
先确认运行环境:插件要求 Node >= 20,并依赖本机 Git 命令行。装之前可以先跑一下:
git --version
确认 Git 已安装且 git 在 PATH 中即可;找不到时页面会提示 Git 不可用。
然后在插件目录里执行:
dsh plugin --profile web add .
README 另给出一个指定路径的示例:
dsh -- plugin --profile web add D:\desktop\plugins-test\dsh-worktrees
需要说明的是,资料中给出的安装命令均为本地路径安装形式,没有提供从 GitHub 远程仓库安装的命令。
安装后重启或刷新 DSH,打开设置面板就能看到 Worktrees。
依赖方面,插件通过 peerDependencies 声明了 @deepseek-ai/cordis ^4.0.1、@deepseek-ai/dsh-host-webserver ^0.1.0-rc.6、@deepseek-ai/dsh-client-locale / dsh-client-runtime / ui-settings / ui-slots(均 ^0.1.0-rc.6)和 react ^18.2.0,需要与当前 DSH 版本匹配。
典型用法¶
三种模式各对应一个来自 README 的可复现例子。
新分支模式,从主线开一个新功能分支:
目录名:feature-order-export
模式:新分支
分支名 / 引用:feature/order-export
起点:HEAD 或 origin/main
实际执行类似:
git worktree add -b feature/order-export ..\feature-order-export origin/main
已有分支/引用模式,把已存在的分支 checkout 到单独目录:
目录名:fix-login-redirect
模式:已有分支 / 引用
分支名 / 引用:fix/login-redirect
实际执行类似:
git worktree add ..\fix-login-redirect fix/login-redirect
Detach 模式,临时查看某个 tag,不创建本地分支:
目录名:review-v1.2.0
模式:Detach
起点:v1.2.0
实际执行类似:
git worktree add --detach ..\review-v1.2.0 v1.2.0
经过上面的步骤,新建的 worktree 默认会出现在左侧 DSH 工作区里,可以直接打开使用。
适用场景与注意¶
适合的人:需要在 DSH 里多分支并行开发、不想来回 stash 或手敲 worktree 命令的开发者。
几点注意:
- 插件以当前 dsh 进程的权限运行,安装前建议先检查源码与许可证(MIT © 2026 lwklbb);
- 删除默认不强制,插件自己不会递归删除目录,删除统一走 Git 官方命令,由 Git 判断是否允许;
- 扫描只读取 DSH 当前 Workspaces 的路径,不会主动扫描整块磁盘;
- 主 worktree 不允许删除。
实现层面补充一点:host API 注册在 /worktrees/api/* 下,包括 list(扫描 workspace 路径里的 Git 仓库和 worktree)、branches(列出仓库分支)、create、remove、prune 五个接口;lib/git.js 是纯 Node 逻辑,负责 git worktree list --porcelain 解析、非 Git 目录过滤、目录名/分支名安全校验,以及基于 git status --porcelain=v1 -b 的状态摘要。
小结¶
dsh-worktrees 做的事不复杂:把 Git worktree 的扫描、创建、删除、prune 收进 DSH 设置面板,并把新建的 worktree 接入工作区。如果你平时在 DSH 里多分支并行开发,可以试试。
- GitHub:https://github.com/lwklbb/dsh-worktrees
- 第三方社区插件目录收录页:https://www.skillhub.cn/plugins/lwklbb/dsh-worktrees(该地址来自插件线索,README 与 package.json 中未出现,请以实际访问为准)