在自架的 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 批處理作業
- 打開 FreeFileSync 主程式。
- 左側選擇你的「本地端開發資料夾」,右側選擇「Nextcloud 同步資料夾」。
- 點選綠色齒輪圖示調整同步設定:
- 同步類型:若有多台電腦交叉修改需求,建議選擇 「雙向 (Two-way)」;若只想由本地端單向覆蓋雲端,選擇 「鏡像 (Mirror)」。
- 點選選單的「檔案」->「另存為批處理作業 (Save as batch job)」。
- 在彈出視窗中,勾選 「最小化運行 (Run minimized)」 與 「忽略錯誤 (Ignore errors)」,確保工具在背景安靜執行,最後儲存為
.ffs_batch檔案。
2.2. 步驟 2:配置 RealTimeSync 延遲觸發
- 打開隨附的 RealTimeSync 軟體 (紅色雙箭頭圖示)。
- 將剛剛儲存的
.ffs_batch檔案直接拖曳進 RealTimeSync 視窗,軟體會自動帶入監控路徑與執行指令。 - 調整最下方的 「最小空閒時間 (Minimum idle time)」:建議輸入
600(10 分鐘) 或1800(30 分鐘)。- 註:這代表當資料夾發生變動後,RealTimeSync 會開始倒數。若期間 AI 或使用者持續修改檔案,倒數就會重設。只有當整個資料夾完全「安靜」達指定秒數後,才會啟動同步。
- 點選「檔案」->「另存新檔」,將此監控設定儲存為
.ffs_real檔案。
2.3. 步驟 3:設定開機自動背景執行
2.3.1. Windows 系統
- 按下
Win + R開啟執行視窗,輸入shell:startup並按下 Enter,開啟啟動資料夾。 - 將剛才儲存的
.ffs_real檔案建立快捷方式,直接放入該資料夾中即可。
2.3.2. Ubuntu 桌面系統 (GUI)
開啟終端機,為設定檔賦予執行權限:
chmod +x /path/to/your/sync.ffs_real按下
Super鍵 (Windows 鍵),搜尋並開啟 「啟動應用程式 (Startup Applications)」。點選「加入」,欄位填寫如下:
- 名稱:
RealTimeSync Nextcloud - 指令:
"/opt/FreeFileSync/RealTimeSync" "/path/to/your/sync.ffs_real"(若為 Flatpak 安裝,請替換為對應的 flatpak run 指令) - 註解:
背景自動延遲同步
- 名稱:
3. 方案二:使用 GoodSync 設定
GoodSync 內建了更為直覺的自動化管理,不需要額外開啟附屬軟體即可在單一介面完成所有設定。
3.1. 步驟 1:建立工作與套用排除清單
- 新建一個同步工作,設定好本地端與 Nextcloud 的對應路徑。
- 點選視窗中央的 「篩選器 (Filters)」 頁籤。
- 在右側的 「排除 (Exclude)」 欄位中,填入下方章節提供的專用排除清單。
3.2. 步驟 2:設定當檔案變更時延遲觸發
- 點選該工作右上角的齒輪圖示進入 「工作選項 (Job Options)」。
- 切換到 「自動 (Auto)」 標籤頁。
- 勾選 「當檔案變更時 (On File Change)」。
- 在其右側的 「延遲秒數 (Delay seconds)」 輸入框中,設定空閒寬限時間 (例如輸入
600代表 10 分鐘)。 - 儲存設定,並確保 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。
- 安裝工具:
sudo apt install inotify-tools - 撰寫一個簡單的 Shell 腳本,利用
inotifywait監控開發目錄。 - 在腳本中加入
sleep 600作為延遲緩衝,倒數結束後調用FreeFileSync的.ffs_batch進行靜態同步。 - 將該腳本打包成
systemd --user服務設定開機自啟。
6. 結論
解決 AI 開發工具同步衝突的最佳解法,往往不是更換更大規模的伺服器架構,而是優化檔案的「同步時機」。
透過 FreeFileSync 的 RealTimeSync 或 GoodSync 的檔案變更延遲功能,我們成功在「本地端即時寫入」與「雲端非即時備份」之間建立了一個安全緩衝帶。這套「動靜分離」的同步策略,不僅完全滿足了兩台電腦非同時開機的異地接力開發需求,更讓個人開發環境免於維護繁瑣的 Git 伺服器,達成了操作透明化與自動化的理想狀態。
