dsh-github-sync:用 GitHub 私有倉庫多機同步 dsh 會話與配置

DSH 的會話、插件清單和設置分散在多臺機器上時,恢復和遷移比較麻煩。現有的基於 Git 的方案通常需要 git 二進制支持,且處理衝突和合並比較複雜。minghuo/dsh-github-sync 插件通過 GitHub REST API 解決這些問題,把配置備份到私有倉庫,並在另一臺機器上按整機或單會話恢復。

核心能力

  • 多機同步:支持在多臺機器間同步會話、插件清單與設置。
  • 純 REST API:不依賴 git 二進制,沙箱環境也能用,token 不會落進配置文件。
  • 獨立目錄:每臺機器在倉庫裏擁有獨立的 instances/<實例ID>/ 目錄,互不重疊,無需合併文件。
  • 恢復模式:支持按整機、工作區或單會話恢復,支持 dryRun 預覽。
  • 內容尋址:基於 SHA1 哈希比對,未變化的會話不重複上傳。
  • 瀏覽與閱讀:本機或遠端瀏覽會話清單,支持直接閱讀 zstd 壓縮的日誌(需 Node ≥ 22.15)。
  • 工作區重映射:恢復時可將遠端的工作區目錄名映射到本機路徑,確保文件落在正確的位置。
  • 本地快照:支持在推送前或恢復前自動拍快照,用於快速回滾。
  • 安全與私有:強制私有倉庫,令牌只寫不回讀,對狀態修改請求校驗同源。

安裝與啓用

在 Web UI 對應的 profile 下安裝:

dsh plugin --profile web add github:minghuo/dsh-github-sync

安裝完成後重啓 dsh web 使插件生效。

配置與備份

  1. 在 GitHub 建一個私有倉庫(插件不代建,公共倉庫會被拒絕)。
  2. 創建一個 fine-grained PAT,只授權該倉庫。權限勾選 Contents: Read and write(若使用 PR 模式,還需勾選 Pull requests: Read and write)。
  3. 打開 Web UI → 設置 → GitHub 同步,填入倉庫 URL(owner/repo 或完整 URL)、分支名和令牌,保存。
  4. 點擊“驗證倉庫”確認可寫且爲私有,隨後點擊“立即備份”。

恢復與會話管理

在另一臺機器上安裝相同的插件並配置相同的倉庫後,進入“會話備份”頁面即可查看並恢復遠程內容。

  • 定時備份:在“概覽 → 自動備份”中開啓。設置 autoSync 爲 true,並指定 intervalMinutes(最小 5 分鐘),支持啓動時備份一次。
  • 瀏覽:
    • 本機瀏覽:按工作區分組,顯示會話數、體積、最近修改時間及最大日誌文件名。
    • 遠端瀏覽:列出每臺機器備份的工作區與會話統計信息。
  • 恢復:支持整臺機器、單個工作區或 dryRun 模式。恢復前會自動拍本地快照(pre-restore-*)。
  • 工作區重映射:解決兩臺機器上同一項目路徑不同的問題,恢復時將遠端目錄名映射到本機路徑。
  • 閱讀日誌:點擊會話名即可在頁面內解壓查看 zstd 日誌文本。

同步內容與限制

同步內容

插件提供三類內容的同步開關,關閉某類既不上傳也不會刪除雲端已有內容:

分組 默認 內容 排除項
sessions 開 $DSH_HOME/sessions/** *.tmp、session.lock、.dsh-mkdir*
plugins 開 各 profile 的 package.json、cordis.patch.yml、pnpm-lock.yaml、pnpm-workspace.yaml node_modules、cordis.yml、.dsh-market、.dsh-module-fallback
settings 關 $DSH_HOME/settings.yaml —

本地機密(如 .credentials.yaml、.anonymous-user-id)從不參與同步計劃。

安全與已知限制

  • 令牌安全:令牌只寫不回讀,存儲在 settings 命名空間或 $DSH_HOME/dsh-github-sync/config.json。
  • 私有強制:每次推送前會檢查倉庫元數據,private !== true 直接拒絕。
  • 跨機恢復:不會改寫會話 header 裏的 cwd(日誌體中的絕對路徑保持原機器路徑)。
  • 文件限制:GitHub 單個 blob 上限 100 MB,默認跳過超過 45 MB 的文件。
  • 樹接口限制:會話目錄樹很大時,GitHub tree 接口可能返回 truncated,此時只做增量比對。
  • 共存:與遺留的 ~/.dsh git 倉庫並存,插件不會觸碰該目錄。
  • 不參與同步項:$DSH_HOME/storages/workspace.json(工作區註冊表)、$DSH_HOME/attachments(附件)不在同步範圍內。

生態背景

DSH 理念是“一切皆插件”,該插件已上架 SkillHub 插件目錄(獨立站點,與 DeepSeek 無官方從屬關係)。

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

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

小夜