跳至主要内容

[Git] Add empty folder

如何提交空資料夾?

最近專案中不斷被問起這件事, 為了日後管理維護方便, 案主期待 git 裡面能夠預先建立對應的資料夾樹.

而 git 設計是無法提交空資料夾, 雖然網路上可以找到一些 hack 的方式可以在 git 裡加入空資料夾, 但可能因不同 git 版本關係, 在 checkout 時無法建立對應資料夾.

通用解法是在該資料夾底下新增一個不影響程式運行的檔案. 常見的有 .gitignore .gitkeep README.md

.gitignore

若該資料夾不該保存任何程式資源, 只是為了專案特殊需求而必須存在資料夾, 可新增 .gitignore 檔. 內容範例如後:

$ mkdir <NEW_FOLDER>
$ cd <NEW_FOLDER>
$ vi .gitignore

# Ignore everything in this directory
*
# Except this file
!.gitignore

往後專案開發在該資料夾放任何檔案, commit 時都不會被加入 git 倉儲, checkout 時也不會產生衝突或影響. 適合當作不同環境會有所不同開發測試資源, 臨時資料夾等.

.gitkeep

在資料夾底下新增一個 .gitkeep 的空白檔案, git 就不會認為是空資料夾了. 雖然命名很像 Git 的系統檔案, 但其實不是, 它只是個普通檔案.

這個方式可以保存資料夾, 日後資料夾有檔案增減時, 亦會被提交到專案倉儲.

題外話: 在 gitlab web 上新增資料夾時, gitlab 也是新增 .gitkeep 檔來處理空白資料夾的提交.

$ mkdir <NEW_FOLDER>
$ cd <NEW_FOLDER>
$ touch .gitkeep

README.md

和新增 .gitkeep 一樣, 在空資料夾下新增 README.md 檔案, 就不是空資料夾了.

不同的地方是 .gitkeep 會被視為系統隱藏檔, 大部分開發工具都會忽略它的存在, 而 README.md 則是個一般檔案, 要注意開發工具會不會引用而出錯.

若開發工具不會因為 README.md 出錯, 且專案是多人共同開發, 新增個 README.md 簡單說明一下該空資料夾作什麼用途, 是對團隊較為友善的方式.

$ mkdir <NEW_FOLDER>
$ cd <NEW_FOLDER>
$ vi README.md

WHO CREATED THIS FOLDER
WHY THIS FOLDER EXIST
WHAT THIS FOLDER WORKING FOR

Reference