症狀
把互動視覺化資產搬進 astro-app/public/algo/(252 檔)後,git status 只看到 0 個 untracked——資產根本沒進 git。
若沒抓到,CI 乾淨 checkout 時就缺這些資產,/algo/ 上線會是空的。
原因
.gitignore 有一條無錨點的 public,本意是擋 Quartz build 到 root 的 public/(build 產物),卻同時匹配任何叫 public 的目錄,包含 astro 的原始碼靜態資產目錄。
修法
把 .gitignore 的 public 改成 root 錨定的 /public:
node_modules
/public # 只擋 root 的 Quartz build 產物
prof驗證:git check-ignore public 仍被忽略;git check-ignore astro-app/public/algo/... 改後不再被忽略。
為什麼這樣解
無斜線的 gitignore pattern(public)匹配任何層級的同名目錄;加 / 前綴錨定到 repo 根,只擋 root。專案裡只有兩個 public 目錄:root(build 產物,續擋)、astro-app/public(原始碼,要追蹤),所以 /public 精準解決。
怎麼預防再次發生
- 搬檔到某目錄後,若
git status顯示 0 untracked 但你明明加了檔,第一個懷疑 gitignore:git check-ignore -v <path>看是哪條規則、哪一行命中。 - 寫 build-artifact 的 gitignore 規則時,凡是常見目錄名(public / dist / build / target)一律加
/錨定,別用裸名。
相關主題
- 同樣在搬 viz 資產時會碰到的坑:Quartz 會把連結的 .html 去掉,靠 Cloudflare Pages 的 clean-URL 才解析得到靜態 .html 頁