lwklbb/dsh-worktrees:把 Git worktree 管理搬進 DSH 設置面板

前言

用 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 並掃描:

  1. 識別每個 workspace 是否屬於 Git 倉庫;
  2. 同一個倉庫被多個 workspace 命中時,只保留一份;
  3. 展示倉庫根目錄、已有 worktree 數量、分支數量。

非 Git 目錄會靜默忽略,不會報錯;Git 未安裝或不在 PATH 中時,頁面會提示 Git 不可用。

Worktree 列表

選中一個倉庫後,列表展示每個 worktree 的:目錄名、完整路徑、當前分支、是否 detached、是否主 worktree、clean/changed 狀態、ahead/behind 信息、是否已加入 DSH 工作區。

創建 worktree

創建區支持三種模式,先選模式,再填目錄名和分支/起點:

  1. 新分支:執行 git worktree add -b,從指定起點創建新分支;
  2. 已有分支/引用:執行 git worktree add,把已有分支 checkout 到單獨目錄;
  3. 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 命令的開發者。

幾點注意:

  1. 插件以當前 dsh 進程的權限運行,安裝前建議先檢查源碼與許可證(MIT © 2026 lwklbb);
  2. 刪除默認不強制,插件自己不會遞歸刪除目錄,刪除統一走 Git 官方命令,由 Git 判斷是否允許;
  3. 掃描只讀取 DSH 當前 Workspaces 的路徑,不會主動掃描整塊磁盤;
  4. 主 worktree 不允許刪除。

實現層面補充一點:host API 註冊在 /worktrees/api/* 下,包括 list(掃描 workspace 路徑裏的 Git 倉庫和 worktree)、branches(列出倉庫分支)、createremoveprune 五個接口;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 中未出現,請以實際訪問爲準)
羽毛球分组比赛记分
小程序二维码

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

小夜