AI 工作流 / 教學文章

兩個 AI 同時改一個網站,為什麼會打架?

我的官網有兩篇文章同時要上線,一篇檢查全過卻只能排隊。當天我把根因挖出來、設計了新機制、請另一家 AI 審查、當天上線。這篇把整個過程拆開來教:用「三張桌子」解決互卡與版本衝突。

左邊兩隻咪卡擠在同一張大桌子上稿紙交疊,右邊三張小桌子各坐一隻咪卡安心寫稿
擠一張桌子就要排隊,一人一張桌子就不用。整篇文章講的機制,濃縮成這一張圖。

這篇在講什麼:當多個 AI(或多個人)同時維護同一個網站,會出現互相排隊、蓋掉彼此版本、目錄與內容不同步三種病。這篇用我自己官網當天的真實事故當教材,講清楚根因(所有人共用同一個工作資料夾),並給出一套當天就上線的解法:分軌施工、合併上線、每日巡檢。

適合誰
  • 已經讓兩個以上的 AI 幫忙顧網站,常常這個做到一半、那個不敢動的人
  • 幫客戶做網站,想把「多人維護不打架」設計進交付規格的接案者
  • 網站更新越來越頻繁,開始怕「上錯版本、蓋掉別人」的團隊
你可以帶走什麼
  • 一套三件套機制:git worktree 分軌施工、合併上線壓單一 commit、每日巡檢抓漏
  • 六步落地清單,自己的站或客戶的站都能照裝
  • 一段可以直接貼給 AI 的委託指令,讓它幫你把機制建起來

今天早上,兩篇文章互卡了

場景是這樣的:我的官網由多個 AI session 分頭維護,A 在改服務方案頁,B 的新文章已經全部就緒,發布前的十項檢查全數通過,只差最後一步推送。

然後 B 停下來了。因為它看到 A 還在同一個資料夾裡施工,按照我們立過的安全規則(同一時段只准一個 session 施工,動工前要掛牌登記),它只能排隊。

我當下說了兩句話:「我希望可以是單篇、單頁,部署不會影響。」還有一句更真實的:「安全機制太擋,很麻煩。」

這不是第一次。更早之前發生過一方為了發布、動了另一方還沒完成的檔案;也發生過正式網域被舊版本蓋回去。每出一次事,我們就多立一條規則,規則越立越多,排隊越排越長。

先講結論:打架的根因只有一個

很多人以為是部署的問題。我的網站早就改成 Git 整合自動部署了:推送一個 commit,平台自動建置上線,部署的單位是 commit,理論上誰都不會蓋掉誰。

那為什麼還會打架?因為所有 AI 共用同一個本機資料夾

想像一群人擠在同一張桌子上寫稿。桌上只要有別人還沒收走的稿紙,你就不敢動,怕弄亂別人的東西;你要出門送印,也得先確認桌上沒有別人的半成品會被夾進去。於是大家立了規矩:同一時段只准一個人用桌子,用之前要掛牌登記。

關鍵判斷排隊規則有用,它擋下過好幾次事故。但它解的是症狀,根因還留在原地:只要大家還共用一張桌子,排隊就永遠存在。要消滅排隊,要動的是桌子,而非規則。
為什麼我總是先挖根因,再立機制

解法三件套

PART 1分軌施工

每篇文章一張自己的桌子(git worktree),物理隔離,施工完全不排隊。

PART 2合併上線

上線走一支合併腳本,唯一的排隊點從「整段施工」縮到五到十分鐘。

PART 3每日巡檢

全站檢查改成每天自動跑一次,抓漏但不擋人。

三格示意:多張桌子各自施工、合併窗口前排隊、咪卡拿放大鏡巡檢網站
三件套各管一段:施工期零排隊、上線期短排隊、檢查期不排隊。

第一件:一個單元一張桌子(git worktree)

每篇文章(或每個獨立更新的頁面)開一個專屬分支,加一個專屬資料夾。Git 內建的 worktree 功能就是做這件事的:

# 為一篇文章開一張專屬桌子(分支+獨立資料夾) git worktree add ~/桌子資料夾/文章名 -b article/文章名 origin/main

從此 A 文章和 B 文章各寫各的,彼此完全看不到對方未完成的檔案,排隊制度直接失去存在的理由。附帶的好處:分支推上去就有預覽網址,草稿給人審不必先上線。

鐵則:分支只放來源檔,禁止放生成檔生成檔指網站的目錄、索引、sitemap 這類「跑腳本長出來的檔案」。為什麼要禁?下一件講到合併時你就會看到,這是整套機制第一個會爆的地雷。

第二件:合併上線,唯一的排隊點縮到幾分鐘

文章寫完要上線,走一支合併腳本,一次做完六步:

  1. 取鎖(同時只能有一個合併在跑)
  2. 確認主資料夾乾淨、同步遠端
  3. 把文章分支合併進來
  4. 重跑全部生成器,把目錄、索引、sitemap 重新編一次
  5. 以上全部壓成一個 commit 推送,平台自動建置
  6. 用這個 commit 的編號核對線上建置,對得上才放鎖

整段大約五到十分鐘,這是新機制裡唯一要排隊的地方。跟原本「整段施工都要排隊、動輒半天」相比,體感就是換了一套機制,而非又多了幾條規則。

第三件:每日巡檢,事後抓漏取代事前全擋

舊做法是每次發布都跑全站檢查,檢查越多、發布越卡。新做法把檢查拆成兩層:發布當下只檢查「我這篇沒壞」;全站級的檢查(文章互聯是否完整、索引有沒有漏頁、線上隨機抽測、AI 客服的檢索資料是否正常)做成一支腳本,每天自動跑一次,有問題開卡回報,交人判斷,它自己不修東西,也不擋任何人。

一句話記住分工發布閘門管「我這頁沒壞」,每日巡檢管「全站沒壞」。

最有教學價值的部分:另一家 AI 抓出的三個洞

機制是我和 Claude 一起設計的。設計完我沒有直接上,先丟給另一家的 AI(Codex)審查,而且刻意讓它先不看我的方案、自己獨立設計一次,再來互審,避免被我的想法帶著走。

它的獨立設計和我的方向幾乎一致,這是好消息。更值錢的是它抓出三個「會實際出事」的洞:

洞一:生成檔的衝突會提早引爆我原本想「索引重跑就好」,但如果兩個分支都提交了生成檔,合併時 Git 會先報衝突,根本走不到重跑那一步。所以鐵則改成:分支禁止提交生成檔,生成檔只在合併時重建。
洞二:中間狀態會被部署出去如果「合併文章」和「更新索引」是兩個 commit,平台可能在中間那一刻建置,上線一個「文章進來了、目錄還沒更新」的版本,訪客就會撞到目錄有、點進去卻找不到頁面。所以六步要壓成單一 commit。
洞三:驗收可能驗到別人的建置多條線並行時,「線上有新建置」推不出「那是我的建置」。所以驗收要核對 commit 編號,對得上才算數。

這三個洞的共通點:單獨看每一步都合理,串起來才看得到破口。這正是找第二顆腦、而且找不同家模型審查的價值。

讓兩家 AI 互相挑錯,我有一整套做法

你需要這套嗎?先看兩個條件

條件一:部署走 Git 整合

網站用 Git 託管,推送就自動建置上線(Vercel、Netlify、Cloudflare Pages 的 Git 整合都算)。這是並行的地基;還在用本機資料夾直接推的,先改這個。

條件二:兩個以上的人或 AI 同時改站

只有多人(或多 AI)並行才會打架。單人維護的小站不需要這套,直接在主線上小步快跑就好。

兩個都符合,才值得裝三件套。

給你的落地清單

想在自己的網站(或幫客戶的網站)裝這套,照這六步:

  1. 確認部署是 Git 整合(推送即建置)。
  2. 盤點站內的生成檔,列成「合併時要重跑的生成器清單」。
  3. 寫三支腳本:開桌子、合併上線、每日巡檢。
  4. 定義施工單元的粒度(一頁?一篇?一個功能?),單元越獨立越不衝突。
  5. 教會團隊三句話:開新工作等於開桌子;上線等於跑合併腳本等它全綠;每天看一眼巡檢報告。
  6. 沒有排程能力就把巡檢降級成每週人工跑一次,寫進交接文件。

懶得自己想的話,把這段直接貼給你的 AI:

我的網站用 Git 託管、部署走推送即自動建置。請幫我設計並行施工機制: 每個更新單元開專屬分支加 git worktree 隔離施工; 上線走一支合併腳本(取鎖、合併、重跑所有生成器、壓成單一 commit、 用 commit 編號驗收線上建置); 另外寫一支每日巡檢腳本檢查全站連結與索引。 注意三件事:分支禁止提交生成檔、合併與索引更新必須是同一個 commit、 驗收要核對 commit 編號。
想先補系統概念再動手

最後一個彩蛋:新機制的第一個使用者是它自己

拍板之後,施工這套機制本身就是用這套機制做的:開一張獨立的桌子(worktree 分支),三支腳本在裡面寫完、測完、推上去,全程沒有碰主資料夾一根指頭。當時主資料夾裡還有另外兩個 AI 的在途工作,一個都沒被影響。

連你現在讀的這篇文章,也是在自己的專屬桌子上寫出來的。機制能不能用,最快的驗證方式就是讓它處理自己的誕生。

AI工作流AI應用工作流程教學文章進階