dsh-git-control:在 DSH 右側欄裏做 VSCode 式的 Git 源碼管理

前言

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 槽位
  • 依賴:本機 git CLI(需在 PATH 中,或安裝在 Windows 默認路徑)
  • 許可證:MIT
  • 無構建步驟、無運行時依賴

安裝前請自行檢查源碼與許可證——插件以當前 DSH 進程的權限運行,Host 半邊會調用本機 git。

Host 與 Client 的共同工作方式

插件是一個雙面 bundle:

  1. Host 半邊(index.js)在 DSH 進程內註冊 /git/* HTTP 路由,只通過 git CLI 操作倉庫,不直接讀寫 .git 內部文件。
  2. 瀏覽器半邊(client.js)在右側欄註冊 git 標籤類型,提供 Git 面板、提交圖、diff 視圖與頭部分支芯片。
  3. 請求先過 DSH 的連接信任柵欄(ctx.connection.requestRejection,Host/Origin 校驗 + 登錄 cookie),未認證返回 401/403。
  4. 路徑參數必須是倉庫相對路徑,.. 上跳、絕對路徑、NUL 一律拒絕;discard 需要顯式 confirm: true。
  5. 寫操作(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 半邊改動需重啓應用後生效。

desktop profile 由 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 爲倉庫根,所以先確認打開的會話工作目錄是目標倉庫:

  1. 打開任意會話;
  2. 打開右側邊欄 → 點 + → 在標籤嚮導裏選 源代碼管理(標籤標題顯示爲 Git + 當前分支);
  3. 變更標籤:填寫提交信息 → 暫存/放棄文件 → 提交;
  4. 歷史標籤:瀏覽提交、點開看詳情與逐文件 diff;
  5. 頂部摘要行的刷新按鈕可手動刷新,分支下拉可切換分支(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

羽毛球分组比赛记分
小程序二维码

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

小夜