2013-09-01 60 views
6

如果我有一個目錄應用我在一個單一,未跟蹤文件存儲庫和我執行git clean -f,我得到的消息:如果不刪除應用程序/和未跟蹤的文件仍然存在。「混帳乾淨-f」不留一個空目錄

但是,如果我在同一個目錄中有一個額外的跟蹤文件,並且執行完全相同的命令,那麼未跟蹤的文件將成功刪除。

所以我的問題是:爲什麼Git試圖刪除該目錄,如果它從未跟蹤的文件中清除後它是空的?

下面是一個重現行爲的腳本。提前致謝。

#!/bin/bash 

# Create new empty repo 
mkdir myrepo && cd myrepo 
git init 

# Create app directory with main.c 
mkdir app 
touch app/main.c 

# Try to delete main.c with git clean -> Not working 
git clean -f 

# Add helper.c to app directory and add to index 
touch app/helper.c 
git add app/helper.c 

# Try to delete main.c with git clean -> Now it's working 
git clean -f 

回答

7

您需要通過-d選項git clean刪除未跟蹤目錄。

+0

感謝您的答覆。但是我不清楚爲什麼Git想要刪除整個目錄,如果它在命令後是空的。 – DAXaholic

+1

好吧,git不想刪除目錄(否則它會這樣做,因爲在你的第二種情況下,而不是抱怨和繼續)。由於'git-clean'默認忽略未跟蹤目錄(或者說,沒有跟蹤文件的目錄),所以它永遠不會輸入它們。 – Hasturkun

+0

好吧,現在我明白了。 「......它永遠不會進入他們」是關鍵;) 謝謝! – DAXaholic

3

git不會跟蹤目錄 - 你不能提交一個空目錄來混帳。

(嘗試創建一個空目錄,並將其添加到Git的 - 你不會看到git的地位的任何變化)

即使你添加一些文件到未追蹤目錄,git會不會告訴你所有git status中的文件 - 它將只顯示目錄

檢查this question以獲得更多答案,瞭解爲什麼git沒有版本目錄。

那麼作爲@Hasturkun在他的回答中指出,你需要傳遞-dgit clean刪除未跟蹤目錄