Featured image of post Git 為什麼不追蹤空資料夾?.gitkeep 與 .gitignore 用途是什麼?

Git 為什麼不追蹤空資料夾?.gitkeep 與 .gitignore 用途是什麼?

深入了解為什麼 Git 忽略空資料夾,以及如何正確使用 .gitkeep 與 .gitignore 來管理專案目錄結構。包含實務範例與最佳實踐技巧。

簡單來說,.gitkeep 是一個約定俗成的虛擬檔案。它的存在只有一個目的:強迫 Git 追蹤一個本來應該是空的資料夾。

為什麼需要它?

Git 的設計邏輯是 「追蹤檔案的變動」,而不是 「追蹤資料夾」。如果你的專案裡有一個空資料夾,Git 會視而不見,完全不會把它上傳到 GitHub 或伺服器上

這會造成一個問題:有時候你的程式碼需要某個資料夾存在才能跑,但你又不希望把測試用的髒資料傳上去。此時如果資料夾不存在,程式可能就會報錯。

這些資料夾通常是:

  • logs/:存放日誌檔
  • uploads/:使用者上傳的檔案
  • tmp/:暫存檔
  • cache/:快取資料

這些目錄執行期需要不能真的 commit 裡面的內容,但資料夾本身又不能消失

它的運作原理

為了 「騙」 Git 留下這個資料夾,我們在裡面塞一個沒有實質功能的隱藏檔,讓 Git 覺得「喔!這裡面有東西,我要記下來」。

實務比喻:

想像你在蓋房子(寫專案):

檔案 說明
.gitignore 像是 「垃圾桶標籤」,告訴清潔員(Git)哪些東西(如過期食物、廢紙)絕對不要搬進新家。
.gitkeep 像是 「佔位用的紙箱」。新家還沒裝潢好,但你得先把儲藏室的位置留著,所以在那裡放個紙箱,讓搬家公司知道這塊區域也是房子的一部分,不能直接把它拆掉。

怎麼使用?

  1. 在空資料夾內建立一個名為 .gitkeep 的檔案。
  2. 檔案內容可以是空的,或是寫一句「Keep this directory」。
  3. 將這個檔案 git addcommit 進去。

比較 .gitkeep.gitignore

特性 .gitkeep .gitignore
官方身分 非官方(只是社群慣例) 官方(Git 內建功能)
主要功能 保留資料夾,避免被 Git 遺忘 排除檔案,避免被 Git 追蹤
常見情境 空的日誌檔資料夾、快取資料夾 密碼檔、node_modules、暫存檔

務實的建議:跳脫思維

雖然 .gitkeep 很常用,但它其實不是 Git 官方的一部分。事實上,你也可以用 README.md.placeholder 來達到同樣效果。但為什麼大家偏愛 .gitkeep?因為一看就懂:「這檔案什麼都不幹,只是讓 Git 別刪這個資料夾」

如果你想顯得更專業一點,有一個更有創意的做法,能比單純用 .gitkeep 更具功能性:

在空資料夾放一個 .gitignore,內容寫:

# 忽略此資料夾內的所有內容
*
# 但不要忽略我(這個 .gitignore 檔案本身)
!.gitignore

這樣做既能保留資料夾,又能確保裡面的垃圾檔案永遠不會被誤傳,這才是真正的「防呆防災防翻車」。

總結

  • .gitkeep 是人類對 Git 設計邏輯的妥協。
  • 它不是官方規範,但已成為開發者的事實標準。
  • 真正重要的是理解 .gitignore 如何運作,.gitkeep 只是幫 Git「補智商」的小工具。

Reference

All rights reserved,未經允許不得隨意轉載
使用 Hugo 建立
主題 StackJimmy 設計