dsh-parallel-worktree:DSH 下的 Git 多分支並行開發

前言

在 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
羽毛球分组比赛记分
小程序二维码

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

小夜