Jun.
AI BLOG
2026-10-05AI 日誌

清潔工順著便條紙,把另一個專案的零件倉庫搬掉一部分

清潔工順著便條紙,把另一個專案的零件倉庫搬掉一部分 封面
封面由跨專案自動彙整流程生成。

我請 AI 開了一個放舊版程式的暫時資料夾,用完要清掉時,清掉的東西多了一部分,連主專案的零件也被刪了。這篇記錄事情怎麼發生、怎麼補回來,以及之後收尾的固定做法。

刪暫時資料夾時,連主專案的零件倉庫也被搬走一部分

我想證明程式大改前後,模擬算出的數字完全相同,但手上沒有舊版的結果。所以請 AI 另開一個暫時資料夾放舊版程式,並在裡面貼一張指向主專案零件倉庫的便條紙(Windows 的 junction,一種資料夾捷徑),兩邊共用同一包零件,省得重裝。

對照跑完後,AI 下指令清掉暫時資料夾。清潔工看到便條紙,就順著它走進倉庫開始搬東西,搬到一半因為路徑太長卡住才停。畫面只報「路徑太長」,完全沒提它碰了另一個專案。

我是事後主動清點倉庫,才發現零件少了一部分。刪除失敗時,錯誤訊息只會講它自己卡在哪,不會告訴你它還波及了哪裡,所以失敗後要先清點受影響的範圍,再決定要不要重試。

note技術細節:worktree 加 junction 的刪除行為

步驟:git worktree add <暫存路徑>/base <舊 commit>,再 mklink /J base\node_modules <主專案>\node_modules。 收尾的 git worktree remove --force 把 junction 當一般子目錄遞迴刪除,刪到連結另一端的真實檔案。 因 node_modules 層級深,撞到 Windows 路徑長度上限,回報 Filename too long,停在主專案已被刪一部分的狀態。 事後檢查:主專案 node_modules/.bin 整個消失,另有少數套件目錄不見。

先拆便條紙、再照清單重進貨,倉庫就補得回來

發現少東西後,我沒有重試刪除。第一步是只拆掉便條紙本身,確認暫時資料夾裡已經沒有任何連結,才把整個資料夾丟掉。

接著在主專案照零件清單(lockfile,記錄每個套件與版本的清單)把倉庫清空重裝。重裝後型別檢查、全套測試、打包流程都通過,清單檔也沒有變動。受影響的只有本機的零件包,程式碼與 git 紀錄都沒被碰到。

能補回的是清單上列的所有東西。清單以外的補不回,例如手動裝過卻沒登記的套件,或打包快取(快取下次啟動會自動重建)。這次我補查過,專案沒有額外修補檔,也沒有安裝後自動執行的腳本,套件檢查沒有缺漏或多餘,所以實際上沒有補不回的東西。

遇到共用資源被誤刪,修完之後還要確認清單以外有沒有東西遺失,否則「測試通過」只證明清單上的部分。

note技術細節:止血與修復指令

拆連結:cmd /c rmdir <junction>。不帶 /s 時只移除連結,不碰另一端。 確認:dir 看暫時目錄內不再有 <JUNCTION>,才刪目錄。 修復:主專案跑 npm ci,清空 node_modules 並依 package-lock.json 重裝。 驗證:型別檢查、全套測試、expo-doctor、expo export 通過,git status 顯示 lockfile 無變動。 邊界檢查:無 patches/、無 postinstall 腳本,npm ls 無缺漏或多餘。

收尾順序要寫成死規矩,因為 AI 的捷徑本身沒有錯

共用零件包這個捷徑本身合理,AI 漏想的是收尾。所以我把規矩定成固定順序:先拆便條紙,確認拆乾淨,最後才刪資料夾。任何會一路往下刪的指令,都不要讓它直接面對連結。

更好的做法是少開暫時資料夾。要看舊版內容,可以直接從 git 讀舊檔,或在改動前就把對照數字存下來。動共用資源之前,也先留一份當下的零件清單,事後逐項比對。

這次 AI 主動回報了自己造成的問題,修好後補查復原範圍,並把規矩寫進專案記憶,之後每次對話開頭都會讀到。事故處理的順序是出事、止血、修復、查邊界、記規則,換個情境也能照用。

這類悄悄壞掉的例子,我另外整理在 靜默失敗圖鑑:Expo 與 React Native 上那些不報錯的壞法,AI 協作時怎麼驗收則寫在 AI 協作開發:非技術 PM 的驗收閘門。

note技術細節:預防清單

收尾順序:rmdir 拆連結,dir 確認,最後才刪目錄;避免 --force、rm -rf、rmdir /s 直接面對 junction 或 symlink。 替代做法:在主專案用 git show <commit>:<path> 讀舊檔,或改動前先存對照數字。 留底:npm ls --all > before.txt,事後與現況比對,可涵蓋 lockfile 以外的項目。


本篇為每週 AI 日誌,本週主題指定為筆記「刪暫時工作目錄會順著連結刪到主專案:git worktree 與 node_modules junction」。

回到 AI BLOG