
我刪除了工作資料夾中某個目錄中的所有文件,但該目錄本身仍然存在。將變更推送到遠端儲存庫後(GitHub)我檢查了我的項目,發現該目錄消失了。 Git 有可能刪除空白資料夾嗎?
答案1
為什麼不顯示目錄?
Git 不追蹤目錄;它只跟踪文件。
如果目錄中沒有文件,則在新增或刪除文件時該目錄對於 Git 而言並不「存在」。特別是,當您刪除目錄中的所有檔案並將變更新增至索引時,目錄將從 Git 的索引中消失。反之亦然,git add
如果目錄為空,則不會新增 via。
換句話說:如果您可以在文件瀏覽器中本地看到該目錄,但它從GitHub 中消失,則您很可能從該目錄中刪除了所有文件,將該更改添加到索引中,然後提交並推送它。
那麼如何追蹤空目錄呢?
如果要明確追蹤空目錄,則必須在其中建立一個檔案。由於 Git 不會追蹤空目錄,因此您必須透過將目錄中的檔案新增至 Git 的索引來欺騙它這樣做。
通常,人們會將一個名為的檔案儲存.gitkeep
在他們希望追蹤的目錄中,但該目錄暫時應保持為空。你可以給文件任何當然還有其他名稱,但該名稱.gitkeep
是一種約定。大多數系統上的檔案清單不會顯示該.gitkeep
檔案(由於以 開頭)。.
除了 之外.gitkeep
,一些用戶還喜歡README
在那裡放置一個文件,最好有一個簡短的描述,說明為什麼該目錄首先必須存在。
例子
$ mkdir foo
$ git init
$ git add .
$ git ls-files # which files does Git know about?
# apparently, none
$ touch foo/bar # create a file in the directory
$ git add .
$ git ls-files # does Git know about it now?
foo/bar # yep!
在這裡,foo
只有當檔案位於目錄中時,目錄才會新增到索引中。
如果我真的想要追蹤一個空目錄?
答案2
將以下.gitignore
文件新增至您希望包含在儲存庫中的資料夾。
# Ignore everything in this directory
*
# Except this file
!.gitignore
添加.gitkeep
有效,但不是官方解決方案。看https://stackoverflow.com/questions/7229885/what-are-the-differences- Between-gitignore-and-gitkeep
答案3
git clean
如果您執行-dffx
(甚至可能使用這些選項的子集),Git 可能會刪除資料夾。
正如 @TRiG 在評論中提到的,如果您提交時目錄為空,它不會顯示在例如 GitHub 中,因為 git 不跟踪目錄(它跟踪文件)——這些文件所在的樹是不存在的不再相關,因為沒有文件,所以沒有樹。
如果沒有更多細節,我們實際上不可能正確回答您的基本問題(發生了什麼事?)。
答案4
對於 Linux / MAC OSX,使用以下一行程式碼,以遞歸方式建立/將空佔位符檔案放入資料夾中,以防止它們被 git 忽略:
find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \;
希望這對某人有幫助。