簡單來說,.gitkeep 是一個約定俗成的虛擬檔案。它的存在只有一個目的:強迫 Git 追蹤一個本來應該是空的資料夾。
為什麼需要它?
Git 的設計邏輯是 「追蹤檔案的變動」,而不是 「追蹤資料夾」。如果你的專案裡有一個空資料夾,Git 會視而不見,完全不會把它上傳到 GitHub 或伺服器上。
這會造成一個問題:有時候你的程式碼需要某個資料夾存在才能跑,但你又不希望把測試用的髒資料傳上去。此時如果資料夾不存在,程式可能就會報錯。
這些資料夾通常是:
logs/:存放日誌檔uploads/:使用者上傳的檔案tmp/:暫存檔cache/:快取資料
這些目錄執行期需要、不能真的 commit 裡面的內容,但資料夾本身又不能消失。
它的運作原理
為了 「騙」 Git 留下這個資料夾,我們在裡面塞一個沒有實質功能的隱藏檔,讓 Git 覺得「喔!這裡面有東西,我要記下來」。
實務比喻:
想像你在蓋房子(寫專案):
| 檔案 | 說明 |
|---|---|
.gitignore |
像是 「垃圾桶標籤」,告訴清潔員(Git)哪些東西(如過期食物、廢紙)絕對不要搬進新家。 |
.gitkeep |
像是 「佔位用的紙箱」。新家還沒裝潢好,但你得先把儲藏室的位置留著,所以在那裡放個紙箱,讓搬家公司知道這塊區域也是房子的一部分,不能直接把它拆掉。 |
怎麼使用?
- 在空資料夾內建立一個名為
.gitkeep的檔案。 - 檔案內容可以是空的,或是寫一句「Keep this directory」。
- 將這個檔案
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「補智商」的小工具。