症狀

把互動視覺化資產搬進 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 頁