dsh-auto-git:爲每個新註冊的 DSH 工作區自動 git init

在 DSH 工作流中,git 相關插件(如 @linxin666/dsh-client-ui-git-graph)的分支膠囊依賴工作區目錄是一個 git 倉庫。如果目錄未初始化 git,相關功能將不可用。dsh-auto-git 解決了這個問題,它監聽工作區註冊事件並自動爲每個新工作區執行 git init,使 git 功能在所有工作區中可用。

核心功能

  • 自動初始化:監聽 domain/changed 事件,對新工作區根目錄執行 git init -b main。
  • 初始提交:默認情況下,執行一個空提交 (git commit --allow-empty),確保 HEAD 不處於 detached 狀態,分支膠囊能正常顯示分支名。
  • 冪等處理:在同一個 host 進程內,同一個路徑只處理一次;如果倉庫已存在則跳過。
  • 零運行時依賴:僅使用 Node.js 原生模塊 (node:child_process / node:fs/promises),無額外依賴。
  • 無嵌套:如果父目錄已經是倉庫或當前目錄是 git worktree 檢出,則跳過初始化。

安裝與啓用

從 GitHub 安裝:

dsh plugin --profile web add github:zhitiaojun/dsh-auto-git

本地開發用 link: 指向 checkout:

dsh plugin --profile web add link:D:/Project/1/dsh-auto-git

重要:安裝後必須重啓 dsh web 纔會裝進 host 進程。

配置

安裝後由 profile 的 bundle patch (cordis.patch.yml) 提供行配置。以下是可用字段:

字段 默認值 含義
enabled true 總開關,false 時插件什麼都不裝
branch main 初始分支名
initialCommit true 是否補一個空提交(關閉則新倉庫分支名可能顯示爲 detached)
sweepExisting true 是否也處理啓動前已註冊的工作區(默認會處理當前所有未註冊爲倉庫的已註冊工作區)
timeoutMs 30000 每條 git 命令的超時時間

驗證

  1. 運行核心測試:
    在倉庫根目錄下執行:
    node D:\Project\1\dsh-auto-git\test\smoke.mjs
  1. 檢查日誌:
    查看安裝日誌:
    ~\.dsh\profiles\web\.dsh-market\log.ndjson
應有該包的 `install` 與隨後的 `restart` 記錄。
  1. 檢查 Git 狀態:
    在任意新註冊的 DSH 工作區目錄中執行:
    git -C <新目錄> log --oneline
應該能看到 `chore: initial commit`。

注意事項

  • sweepExisting 行爲:默認爲 true。安裝並重啓後,當前所有還不是倉庫的已註冊工作區都會被初始化。如果只想影響以後新建的工作區,需將 sweepExisting 改爲 false。
  • 卸載回滾:卸載插件不會回滾已經建好的倉庫。
  • 依賴版本:需要 DSH 版本 >=0.1.5-rc.1。
  • 運行環境:純 host 側插件,無瀏覽器貢獻代碼。

總結

dsh-auto-git 通過在 DSH 工作區註冊時自動初始化 git 倉庫,解決了 git 相關插件在非倉庫目錄下不可用的問題。它是一個輕量級的 host 側插件,適合需要統一 git 管理的 DSH 工作流環境。

更多細節與源代碼,請訪問:GitHub | 目錄站

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

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

小夜