前言¶
用 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 中未出現,請以實際訪問爲準)