前言¶
在 DeepSeek Harness(DSH)里用 Agent 改代码,常见做法是同一仓库上开多个任务:一个会话做功能 A,另一个做 Bugfix B。Git 本身支持 git worktree,DSH 也内置 create_worktree,但内置能力通常只完成「建一个检出」——检出路径、注册信息、环境文件、未提交改动如何带进新目录、以及合并后如何清理,仍要人工记步骤、手工维护。
下面介绍的 dsh-parallel-worktree(维护者 wang-yi-bit64)是社区「工作流」类插件,在 DSH 上补一层工程化:注册表、目录布局约定、环境引导,以及同步、合并、清理的闭环;同时提供 /worktree 斜杠命令、模型工具(worktree_create、worktree_list 等)和会话 composer dock 里的只读面板。插件在 SkillHub 目录 可检索;源码与文档在 GitHub(MIT 许可证,Node >= 20)。
这是什么¶
一句话:给 DSH 加上「多分支并行开发」——为每个任务开一个独立的 git worktree,让多个 Agent 或多个终端在同一仓库上并行工作,互不污染主工作区。
它与内置 create_worktree 的分工是:内置工具负责建检出;本插件负责注册表(registry.json)、布局(默认仓库外 <repo>.wt/,或可选仓库内 .worktrees/)、环境引导(可选携带未提交改动、复制 .env、junction/symlink 复用 node_modules),以及 list / sync / merge / remove / prune 等可重复操作。写操作集中在命令与工具;UI 面板只读,避免误点丢掉未提交改动。
界面与可见性¶
装好插件并完全退出后重启 DSH Desktop,在 设置 → 插件 列表中会出现卡片:中文标题「并行 Worktree(多分支并行开发)」,英文为 Parallel Worktrees;文案与 icon.svg 来自包内 locale/ 与图标文件,未启用插件时列表也会显示这些信息。
会话界面在 composer dock(输入框下方)始终有一个 worktree 徽标:当前目录在受管 worktree 内时显示名字与分支;否则显示「并行 worktree」及该仓库 worktree 数量。点开弹出只读面板,数据来自 /worktree status --json 与 /worktree list --json,展示分支、路径、脏状态、相对基线的领先/落后等;面板不提供新建、删除、合并按钮。
核心功能¶
以下能力均来自插件 README 与包说明,可按场景选用。
创建
- 模型工具:
worktree_create - 命令:
/worktree create <name>(可配合基线分支、携带未提交改动等选项) - 自动
git worktree add、建分支(默认命名如wt/<name>)、写入注册表
布局
- 默认:worktree 放在仓库外兄弟目录
<repo>.wt/,主仓库git status不被额外目录污染 - 可选
inside:<repo>/.worktrees/,并维护.gitignore
环境引导
- 可选把主仓库未提交改动(binary diff +
apply --3way)和未跟踪文件带进新 worktree - 自动复制
.env/.env.local - 可选 junction(Windows)或 symlink 复用
node_modules
可见性与状态
worktree_list工具与/worktree list:表格化列出分支、路径、是否存在、是否脏、HEAD、相对基线领先/落后/worktree path <name>:只打印路径,便于复制
同步与收尾
/worktree sync:把基线合入当前 worktree(默认rebase --autostash,可切 merge);冲突会 abort 并报MERGE_CONFLICT/worktree merge:在主仓库merge --no-ff,可选--remove、--delete-branch;主仓库脏或 HEAD 分离时会拒绝/worktree remove(脏目录需--force)、/worktree prune(清理目录已消失但注册表仍存在的项)
并发安全
- 注册表写入采用 tmp + rename;跨进程使用
registry.lock;批量创建共用同一把锁
合并、删除等收尾动作在文档中说明没有对应的模型工具,需通过 /worktree 命令自行执行。
版本与发布¶
| 渠道 | 版本 | 说明 |
|---|---|---|
npm dsh-parallel-worktree |
0.2.2(2026-11-03) | latest 指向 0.2.2 |
| GitHub Releases | v0.2.2(2026-11-04) | 含源码 tarball/zip |
跟仓库 main 未发布提交时,资料给出的安装方式为:
dsh plugin --profile desktop add github:wang-yi-bit64/dsh-parallel-worktree
安装前请确认 dsh.profile.bundles 中包含该包名。
安装与启用¶
DSH 插件生效需要:包声明 dsh.bundle(本包含 cordis.patch.yml)、包名出现在 profile 的 dsh.profile.bundles、且包文件能被 DSH 从 node_modules 解析。装完后必须完全退出并重启 DSH Desktop(仅关窗口不够);profile 启动时 compose。路线 B 的 install.mjs 应在桌面退出后执行。
A. 从 npm 安装(推荐)¶
在 DSH:设置 → 插件 → 添加插件,输入包名 dsh-parallel-worktree 确认。插件管理器会在 profile 目录执行 pnpm add,写入 dependencies(当前精确版本 0.2.2),并登记到 dsh.profile.bundles。
命令行等价:
dsh plugin --profile desktop add dsh-parallel-worktree
若只跑了上述命令而未通过管理器登记 bundles,需手动把包名加入 <profile>/package.json:
{ "dsh": { "profile": { "bundles": ["...", "dsh-parallel-worktree"] } } }
包文件位于 <profile>/node_modules/dsh-parallel-worktree,须作为 dependencies 的真依赖,否则后续 pnpm install 可能清理掉未声明的目录。
B. 离线 / 源码目录(install.mjs)¶
无 npm 网络或不想让 profile 的 pnpm 工程管理该包时,在插件仓库根目录执行:
node install.mjs
node install.mjs --dry-run
node install.mjs --profile desktop
脚本将插件复制到 <DSH_HOME>/node_modules/dsh-parallel-worktree(默认 %USERPROFILE%\.dsh\node_modules\),并把 dsh-parallel-worktree 追加进 dsh.profile.bundles。资料明确说明:不要只手工往 dependencies 里加包名却不跑 pnpm,否则 lock 与目录不一致,仍可能被清理。
验证:在任意 git 仓库会话中执行 /worktree help,能看到子命令列表即注册成功。命令未出现时,可查看 <profile>/.plugin-manager/logs;常见错误包括包未解析到位、dsh.bundle 声明缺失等。
典型用法¶
斜杠命令上手¶
在主工作区或已有 worktree 的会话里:
/worktree create feature/login
/worktree list
/worktree path feature/login
create 成功后会输出分支名、磁盘路径、起点提交与 registry.json 位置;之后 cd 到该路径,或在 DSH 新建会话并将工作目录设为该路径。
让 Agent 创建 worktree¶
自然语言示例(可直接粘贴):
帮我为「登录页改版」开一个独立的 worktree:从 main 拉,名字用 feature/login,
并把主工作区当前未提交的改动一起带过去。之后所有改动都只在这个目录里做。
Agent 可调用:
{ "name": "feature/login", "base": "main", "carryUncommitted": true }
返回 JSON 中含 path、branch、manifestPath 等字段;会话侧再切换到 path 继续改文件(插件本身不自动改会话工作目录)。
其它文档示例(节选)¶
- 新任务 + 复用
node_modules:worktree_create({ name: "feature/pay-retry", base: "release/1.8", linkNodeModules: true }) - 查看全部 worktree 与脏状态、落后 main 多少:
worktree_list({}) - 基线更新后合入:
/worktree sync(冲突时需人工处理后再继续)
完整场景说明见 GitHub README。
适用场景与注意¶
适合谁
- 同一仓库上并行多个 Agent 任务或终端会话,且希望主仓库目录保持干净
- 需要可查询的 worktree 清单、同步基线、合并后一键 remove/删分支等 repeatable 流程
- 希望在新 worktree 里快速带上
.env、未提交改动或共享node_modules
使用前请注意
- 插件以当前 DSH 进程权限执行 git 与文件操作;安装前应阅读源码与 MIT 许可证,确认行为符合你的安全策略
merge等写操作会改动主仓库与分支历史;执行前确认主仓库无未预期脏状态- SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系;星标与版本以 GitHub / npm 页面为准
结尾¶
dsh-parallel-worktree 把「开一个 worktree」扩展成带注册表与收尾闭环的并行开发工作流:命令、工具与 composer dock 面板读同一套数据,适合在 DSH 里长期跑多任务协作。当前 npm 与 GitHub Release 均为 0.2.2。
- 目录页:https://www.skillhub.cn/plugins/wang-yi-bit64/dsh-parallel-worktree
- GitHub:https://github.com/wang-yi-bit64/dsh-parallel-worktree