前言¶
DSH 的理念是「一切皆插件」,但日常用 DSH 做開發時,看倉庫狀態還是得切到終端敲 git status、git log、git diff。狀態散落在終端和 GUI 之間,分支切錯、漏看變更的情況並不少見。dsh-git-control(插件名 wx-98/dsh-git)把這個流程搬進了 DSH 右側欄:一個類 VSCode「源代碼管理」面板,帶提交圖、分支切換、hunk 級暫存和逐文件 diff。
這個插件由 wx-98 維護,是 Cordis 插件 bundle(Host 半邊 + Web Client 半邊),不是皮膚、不是 TUI,也不是獨立桌面客戶端。它解決的是「在 DSH 界面內完成大部分常見 Git 操作」這件事。
插件定位¶
插件名:dsh-git-control(目錄頁與 GitHub 倉庫名寫作 DSH-GIT,維護者 wx-98)。
一句話職責:在 DSH Web/Desktop 的右側欄與會話頭部提供類 VSCode/IDEA 的 Git 源碼管理。
- 分類:客戶端插件(Cordis bundle,瀏覽器半邊註冊右側欄標籤)
- 前置:DSH Web/Desktop 0.2.1-rc.5,依賴右側欄標籤擴展點
sidebarRightTabs+sidebar.right.pane.tab槽位 - 依賴:本機
gitCLI(需在 PATH 中,或安裝在 Windows 默認路徑) - 許可證:MIT
- 無構建步驟、無運行時依賴
安裝前請自行檢查源碼與許可證——插件以當前 DSH 進程的權限運行,Host 半邊會調用本機 git。
Host 與 Client 的共同工作方式¶
插件是一個雙面 bundle:
- Host 半邊(
index.js)在 DSH 進程內註冊/git/*HTTP 路由,只通過gitCLI 操作倉庫,不直接讀寫.git內部文件。 - 瀏覽器半邊(
client.js)在右側欄註冊git標籤類型,提供 Git 面板、提交圖、diff 視圖與頭部分支芯片。 - 請求先過 DSH 的連接信任柵欄(
ctx.connection.requestRejection,Host/Origin 校驗 + 登錄 cookie),未認證返回 401/403。 - 路徑參數必須是倉庫相對路徑,
..上跳、絕對路徑、NUL 一律拒絕;discard需要顯式confirm: true。 - 寫操作(stage/unstage/discard/commit/checkout)串行執行,避免併發互相踩;插件不產生任何模型可見事件。
核心功能¶
下面按 README 能力清單逐條列出,均已覈實。
會話頭部分支芯片。 會話標題欄直接顯示 ● main 3(分支 + 變更數 + ahead/behind),點開是工作區變更摘要,不必打開面板就知道在哪個分支。
當前分支狀態。 分支名、當前 commit、上游分支、ahead/behind 計數;detached HEAD 與空倉庫都能正確顯示。
VSCode 風格配色。 狀態字母按語義着色(M 琥珀、A/未跟蹤 綠、D 紅、R/C 藍、衝突 橙),文件名跟隨狀態着色,深淺主題各有一套,HEAD -> main 與遠端引用各有顏色。
提交圖(GRAPH)。 歷史列表左側繪製彩色泳道(圓點 + 豎線 + 合併/分叉曲線);普通分支用 8 色調色板,HEAD 所在分支線用強調色並加大圓點加描邊環,列號跨行穩定、分支線不跳色。
分支面板。 點芯片即開:當前分支段(upstream / ahead / behind / 變更摘要)+ 切換分支(本地分組、當前打勾,點擊即 checkout)+ 分支操作(創建 / 重命名 / 刪除,刪除有二次確認且禁止刪當前分支,未合併需強制刪除)。
IDEA 風格變更樹。 按目錄摺疊/展開,每個文件帶 +N/-N 行數,四分組(已暫存/變更/未跟蹤/衝突)不變。
hunk 級暫存。 diff 內每塊可「暫存此塊 / 取消暫存此塊」,只把該塊應用到索引。
提交增強。 amend 上一個提交 + 最近 10 條提交信息複用(本地保存)。
stash。 列表 / 創建 / 應用 / 彈出 / 刪除,彈層內操作,刪除需確認。
歷史過濾與導航。 按提交信息 / 作者 / 路徑過濾,條件可見且可清除,另支持日期範圍過濾與 ↑/↓/Enter 鍵盤導航;「日誌範圍」與「切換到此分支」是兩個獨立動作。
逐文件 diff。 結構化 unified diff(hunk + 行號 + 增刪着色),支持工作區 / 已暫存 / 未跟蹤(合成)/ 指定提交四種視角;二進制文件有明確提示;大 diff 超過 4000 行會被截斷並提示。
寫操作。 暫存、取消暫存、放棄變更(二次確認)、填寫提交信息並提交(Ctrl/Cmd+Enter)。
提交歷史(IDEA 風格)。 左側分支樹(HEAD / 本地 / 遠端,點擊只改日誌範圍不改 HEAD)+ 右側列式列表(圖 / 主題+refs / 作者 / 日期 / 短哈希);合併提交斜體弱化、HEAD 行強調;提交詳情含完整 sha、正文、變更文件與增刪行數。
自動刷新。 面板可見時變更列表每 4s 輪詢;所有寫操作成功後立即重新拉取。
多語言與主題。 中文 / 英文文案,跟隨宿主主題(深色 / 淺色)。
說明:README 末尾的「已知限制」一節仍寫着「暫不支持分支創建/刪除、stash、hunk 級暫存」,與上文能力清單及
package.json描述直接衝突,判斷是過期文字。清單裏未出現的仍是真限制:pull/push/fetch、三方衝突解決界面、文件歷史(blame)、子模塊視圖。
安裝與啓用¶
從 npm 安裝(推薦)¶
當前 npm latest 爲 dsh-git-control@0.4.6(README 發佈狀態一節仍寫 0.4.0)。
dsh plugin --profile desktop add dsh-git-control
從 GitHub 安裝¶
dsh plugin --profile desktop add github:wx-98/DSH-GIT
本地目錄安裝(開發用)¶
GUI 操作:Plugins → Add plugin → 本地絕對路徑,填本倉庫目錄,安裝後在 Plugins 頁啓用 dsh-git-control 這個 bundle row,刷新頁面。
本地目錄以 link 方式安裝:改動 client.js 刷新頁面即生效;Host 半邊改動需重啓應用後生效。
desktopprofile 由 Electron 應用獨佔管理,CLI 會拒絕操作。此時用 GUI 安裝,或運行倉庫內的一鍵腳本:
pwsh -File .\tools\install-desktop.ps1 # 安裝,重啓 DSH 後生效
pwsh -File .\tools\install-desktop.ps1 -LivePatch # 額外寫 live patch,讓運行中的實例立刻熱加載 Host 半邊
pwsh -File .\tools\install-desktop.ps1 -RemoveLivePatch
典型用法¶
Git 面板以會話 cwd 爲倉庫根,所以先確認打開的會話工作目錄是目標倉庫:
- 打開任意會話;
- 打開右側邊欄 → 點 + → 在標籤嚮導裏選 源代碼管理(標籤標題顯示爲
Git+ 當前分支); - 變更標籤:填寫提交信息 → 暫存/放棄文件 → 提交;
- 歷史標籤:瀏覽提交、點開看詳情與逐文件 diff;
- 頂部摘要行的刷新按鈕可手動刷新,分支下拉可切換分支(
git checkout <branch>)。
開發與驗收命令:
node --test test/ # Host + Client 測試
node tools/verify-installed.mjs "http://127.0.0.1:PORT/?token=XXXX" # 對真實運行中的 DSH 實例做端到端自檢
自檢腳本會用啓動 token 換 cookie,斷言插件已進入客戶端入口圖,拉取被 /plugins 服務的瀏覽器半邊,造臨時倉庫並逐條驅動 /git/* 路由,最後斷言連接柵欄。
適用場景與注意¶
適合:
- 在 DSH Web/Desktop 界面內完成日常提交、暫存、查歷史、切分支的人;
- 需要 commit graph 和 hunk 級暫存、又不想離開 DSH 的人;
- 想給 DSH 右側欄加一個 Git 面板的插件開發者,可以拿
docs/contract.md(Host ⇄ Client 接口契約)當參考。
注意:
- 目標版本是 DSH 0.2.1-rc.5,插件依賴其公開擴展點(
sidebarRightTabs、slots、webServer、connection、locale),DSH 升級後建議重新迴歸。 - 需要本機
git在 PATH 中(或裝在 Windows 默認路徑)。 - 不支持 pull/push/fetch、三方衝突解決界面、文件歷史(blame)、子模塊視圖。
- 大 diff 超過 4000 行會被截斷。
- 插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證(MIT)。
- 社區目錄(SkillHub)是獨立站點,與 DeepSeek / 幻方無官方從屬關係,不屬官方應用商店。
結尾¶
dsh-git-control 的價值在於把 VSCode/IDEA 裏那種 Git 面板完整搬進 DSH 右側欄,並額外提供了會話頭部分支芯片與提交圖泳道,減少在終端和 GUI 之間來回切換的次數。發佈狀態方面,npm dsh-git-control@0.4.6、MIT 許可證、awesome-dsh-plugin 已收錄(PR 已合併)。
目錄頁:https://www.skillhub.cn/plugins/wx-98/DSH-GIT
GitHub:https://github.com/wx-98/DSH-GIT