Featured image of post 解決 AI 開發工具與雲端同步衝突:使用 FreeFileSync 與 GoodSync 實現延遲自動同步

解決 AI 開發工具與雲端同步衝突:使用 FreeFileSync 與 GoodSync 實現延遲自動同步

介紹如何透過 FreeFileSync 與 GoodSync 設定最小空閒時間,解決 Google Antigravity 等 AI 工具因高頻寫入導致 Nextcloud 產生版本衝突的痛點。

在自架的 Nextcloud 上同步開發專案,特別是當專案導入 Google Antigravity 這種會由 AI Agent 頻繁、自動化修改檔案的 IDE 工具時,極容易遇到大量的版本衝突。

這是因為 AI Agent 在執行任務時,會在短時間內高頻率寫入大量的思考狀態、暫存檔與程式碼。當 Nextcloud 桌面客戶端偵測到變動並試圖即時上傳時,若檔案仍持續被 AI 鎖定或修改,就會觸發競態條件,進而產生一堆「衝突複本」。

為了不破壞「跨電腦接力開發」的便利性,同時避免多架設 Git 伺服器所帶來的維護成本與 GitHub 儲存庫過於碎片化的問題,最優雅的解法是採用 「雙資料夾緩衝架構」 搭配 「延遲自動同步」


1. 核心架構:雙資料夾緩衝設計

此架構的核心邏輯非常簡單:將日常開發的工作區放在「本地端普通資料夾」,完全避開 Nextcloud 客戶端的即時監控。等開發告一段落、整個資料夾安靜下來後,再透過同步工具整批將檔案倒進「Nextcloud 同步資料夾」讓伺服器慢慢上傳。

透過這個方式,既能保留 Nextcloud 大檔案傳輸的優勢,又能確保 AI 運作時不被同步軟體干擾。


2. 方案一:使用 FreeFileSync 或 RealTimeSync 設定

FreeFileSync 隨附的 RealTimeSync 工具專門用來處理背景監控,其內建的「最小空閒時間」功能是解決此衝突的關鍵。

2.1. 步驟 1:建立 FreeFileSync 批處理作業

  1. 打開 FreeFileSync 主程式。
  2. 左側選擇你的「本地端開發資料夾」,右側選擇「Nextcloud 同步資料夾」。
  3. 點選綠色齒輪圖示調整同步設定:
    • 同步類型:若有多台電腦交叉修改需求,建議選擇 「雙向 (Two-way)」;若只想由本地端單向覆蓋雲端,選擇 「鏡像 (Mirror)」
  4. 點選選單的「檔案」->「另存為批處理作業 (Save as batch job)」。
  5. 在彈出視窗中,勾選 「最小化運行 (Run minimized)」「忽略錯誤 (Ignore errors)」,確保工具在背景安靜執行,最後儲存為 .ffs_batch 檔案。

2.2. 步驟 2:配置 RealTimeSync 延遲觸發

  1. 打開隨附的 RealTimeSync 軟體 (紅色雙箭頭圖示)。
  2. 將剛剛儲存的 .ffs_batch 檔案直接拖曳進 RealTimeSync 視窗,軟體會自動帶入監控路徑與執行指令。
  3. 調整最下方的 「最小空閒時間 (Minimum idle time)」:建議輸入 600 (10 分鐘) 或 1800 (30 分鐘)。
    • 註:這代表當資料夾發生變動後,RealTimeSync 會開始倒數。若期間 AI 或使用者持續修改檔案,倒數就會重設。只有當整個資料夾完全「安靜」達指定秒數後,才會啟動同步。
  4. 點選「檔案」->「另存新檔」,將此監控設定儲存為 .ffs_real 檔案。

2.3. 步驟 3:設定開機自動背景執行

2.3.1. Windows 系統

  1. 按下 Win + R 開啟執行視窗,輸入 shell:startup 並按下 Enter,開啟啟動資料夾。
  2. 將剛才儲存的 .ffs_real 檔案建立快捷方式,直接放入該資料夾中即可。

2.3.2. Ubuntu 桌面系統 (GUI)

  1. 開啟終端機,為設定檔賦予執行權限:

    chmod +x /path/to/your/sync.ffs_real
    
  2. 按下 Super 鍵 (Windows 鍵),搜尋並開啟 「啟動應用程式 (Startup Applications)」

  3. 點選「加入」,欄位填寫如下:

    • 名稱RealTimeSync Nextcloud
    • 指令"/opt/FreeFileSync/RealTimeSync" "/path/to/your/sync.ffs_real" (若為 Flatpak 安裝,請替換為對應的 flatpak run 指令)
    • 註解背景自動延遲同步

3. 方案二:使用 GoodSync 設定

GoodSync 內建了更為直覺的自動化管理,不需要額外開啟附屬軟體即可在單一介面完成所有設定。

3.1. 步驟 1:建立工作與套用排除清單

  1. 新建一個同步工作,設定好本地端與 Nextcloud 的對應路徑。
  2. 點選視窗中央的 「篩選器 (Filters)」 頁籤。
  3. 在右側的 「排除 (Exclude)」 欄位中,填入下方章節提供的專用排除清單。

3.2. 步驟 2:設定當檔案變更時延遲觸發

  1. 點選該工作右上角的齒輪圖示進入 「工作選項 (Job Options)」
  2. 切換到 「自動 (Auto)」 標籤頁。
  3. 勾選 「當檔案變更時 (On File Change)」
  4. 在其右側的 「延遲秒數 (Delay seconds)」 輸入框中,設定空閒寬限時間 (例如輸入 600 代表 10 分鐘)。
  5. 儲存設定,並確保 GoodSync 常駐於系統列。

4. 關鍵步驟:設定精準的排除清單 (Ignore List)

不論使用哪一套工具,都必須設定排除名單。這能防止同步軟體去捕捉那些每秒都在變動的系統快取或 AI 內部狀態,進而避免「最小空閒時間」因為無意義的暫存變動而無限延長。

請依據使用的工具,將以下樣式複製到軟體的排除 (Exclude) 欄位中:

4.1. FreeFileSync 排除格式

\*/.git/
\*/.agents/
\*/.agent/
\*/.antigravity/
\*/node_modules/
\*/.venv/
\*/__pycache__/
*.tmp
*.bak
*.swp
\*/.DS_Store
Thumbs.db

4.2. GoodSync 排除格式

*/.git/*
*/.agents/*
*/.agent/*
*/.antigravity/*
*/node_modules/*
*/.venv/*
*/venv/*
*/__pycache__/*
*.tmp
*.bak
*.swp
*/.DS_Store
Thumbs.db

4.3. 為什麼必須排除這些項目?

  • .git/:Git 的內部數據庫包含大量高頻變動的碎片檔案,若由檔案同步軟體介入,極易導致遠端索引毀損。程式碼版本應回歸 Git 管理。
  • **.agents/ / .agent/**:Google Antigravity 等 AI 工具在思考與執行任務時的臨時快取目錄。若不排除,其高頻率的寫入會導致同步工具的空閒倒數永遠無法完成。
  • **node_modules/ / .venv/**:第三方套件依賴庫。內部包含數萬個小檔案,透過雲端同步極度消耗效能,正確做法是在新環境直接透過 npm 或 pip 重新安裝。
  • **__pycache__ / *.tmp / *.swp**:編譯快取與編輯器鎖定暫存檔,這些檔案在關閉專案後即失去價值,無需同步。

5. 常見問題與解決方式 (Troubleshooting)

5.1. 問題一:RealTimeSync 的延遲倒數似乎永遠不會結束,一直沒有觸發同步?

  • 原因:專案內有某些隱藏的日誌檔 (Log) 或快取檔持續在背景寫入,導致「最小空閒時間」不斷被重設。
  • 解法:確認排除清單是否設定正確。可以開啟 FreeFileSync 進行一次手動比較,觀察有哪些無關緊要的暫存檔被列在同步清單中,並將其加入過濾器。

5.2. 問題二:在 Ubuntu 無 GUI 的伺服器環境 (Headless) 下,RealTimeSync 無法執行?

  • 原因:RealTimeSync 預設需要 X11 或 Wayland 桌面環境的顯示變數 ($DISPLAY) 支援,無法在純文字指令介面直接常駐。
  • 解法:在無圖形介面的伺服器環境下,建議改用 Linux 原生的 inotify-tools 搭配 systemd 服務來代替 RealTimeSync。
  1. 安裝工具:sudo apt install inotify-tools
  2. 撰寫一個簡單的 Shell 腳本,利用 inotifywait 監控開發目錄。
  3. 在腳本中加入 sleep 600 作為延遲緩衝,倒數結束後調用 FreeFileSync.ffs_batch 進行靜態同步。
  4. 將該腳本打包成 systemd --user 服務設定開機自啟。

6. 結論

解決 AI 開發工具同步衝突的最佳解法,往往不是更換更大規模的伺服器架構,而是優化檔案的「同步時機」。

透過 FreeFileSync 的 RealTimeSync 或 GoodSync 的檔案變更延遲功能,我們成功在「本地端即時寫入」與「雲端非即時備份」之間建立了一個安全緩衝帶。這套「動靜分離」的同步策略,不僅完全滿足了兩台電腦非同時開機的異地接力開發需求,更讓個人開發環境免於維護繁瑣的 Git 伺服器,達成了操作透明化與自動化的理想狀態。