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 add 並 commit 進去。

比較 .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 建立
主題 Stack 由 Jimmy 設計