2017-03-05 190 views
3

我在我的項目中有一個上傳文件夾,我需要git來跟蹤。
兩個文件夾本身和所有子文件夾(我的意思是保持目錄和所有子目錄遞歸除了文件

上傳,
上傳/用戶,
上傳/用戶/型材,
上傳/用戶/型材/圖片

,並像其他路徑)應該被跟蹤。

我已經添加了一個名爲.gitkeep到所有文件夾的空文件和我的.gitignore如下:

uploads/* 
!.gitkeep 

但Git是不跟蹤的子文件夾。

============================================== =================

CodeWizard建議創建.gitkeep通過命令和文件沒有解決強迫混帳忽略一個目錄,除了具有那些所有文件後,孩子的.gitkeep文件。我用這個命令git-add -f在上傳目錄下創建的所有.gitkeep文件。

find . -name '.gitkeep' | xargs git add -f 
+0

你剛創建.gitkeep文件還是將它們添加到git? git status的輸出是什麼? – FuzzyAmi

+0

見http://stackoverflow.com/q/26189082/1256452和http://stackoverflow.com/q/5533050/1256452 – torek

回答

3

.gitkeep添加到所有需要的文件夾中。
Otherwize git會不會跟蹤的文件夾


腳本來創建.gitkeep遞歸

# find all the directories (-type d) 
# filter the empty ones (-empty) 
# ignore the .git folder 
# add .gitkeep to all the matched folders 

find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \; 

如果你願意,你也可以把它添加到最內層夾和git會追蹤所有的父文件夾以及當它的指數

最後一行(SUB1/SUB2 ...)是上述腳本的輸出

enter image description here

+0

您的解決方案似乎並不與OP的'.gitignore'工作。它需要進行如下修改:'上傳/ ** \ n上傳/用戶的\ n上傳/用戶/配置文件的\ n!!上傳/用戶/配置文件/圖片# –

+0

我很抱歉,但我不明白你。腳本有什麼問題?我已經測試過了,它的輸出如截圖 – CodeWizard

+0

所示。問題是,至少在我的系統中,它只跟蹤最外面的'.gitkeep',即'uploads/.gitkeep',_if_OP的'.gitignore'是用過的。這就是爲什麼'.gitignore'也必須被修改的原因。 –

1

雖然CodeWizard的解決方案可以讓你追蹤的文件夾,它不能幫助你忽略他們的文件內容。

爲此,您需要修改您的.gitignore以排除忽略每個子文件夾。例如:

uploads/** 
!uploads/users 
!uploads/users/profiles 
!uploads/users/profiles/pics 

你仍然需要.gitkeep文件每個子文件夾內,或者至少是最裏面的文件夾內。由CodeWizard建議的命令做得非常出色:

find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \; 
+0

手動添加所有子文件夾不是我的類型,CodeWizard命令非常有用,但如果它添加了-f創建的.gitkeep,它將會很棒。 – Unique