2013-03-22 52 views
0

這是我的文件夾結構(find * UNIX格式)的.gitignore排除當文件夾名稱是未知

Project 
Project/hi.txt 
Project/userdata 
Project/userdata/username 
Project/userdata/username/info.txt 
Project/userdata/username/cool 
Project/userdata/username/cool/foo.txt 
Project/userdata/username/cool/bar.txt 

如何使用.gitignore排除在userdata文件夾一切除了cool文件夾?這個解決方案應該不依賴什麼username實際上。

+0

'cool'文件夾只會在'userdata'下的兩個目錄級別內,或者它可以在'userdata'內的任何位置? – Tuxdude 2013-03-22 00:27:13

回答

3

.gitignore也支持內含物,不僅僅是排除。包含否定排除。需要注意的是,如果你排除一個文件夾,它甚至不會對文件夾的內容進行測試。所以,你要設置你的.gitignore的樣子(我假設它的內部Project/已經)

/userdata/* 
!/userdata/*/ 
/userdata/*/* 
!/userdata/*/cool/ 

這是說「在/userdata不顧一切,但不要忽略的文件夾,但不要忽視嵌套文件夾中的所有內容,但不要忽略名爲cool的雙嵌套文件夾「。

+0

但是如果我們不在'Project /'裏面呢?假設一切都在另一個超級文件夾'superfolder'中,並且'.gitignore'在該超級文件夾內。在這種情況下,只需在忽略規則的開始處刪除斜槓即可**不工作。任何想法爲什麼不呢? – steve882 2013-03-22 09:39:25

+1

通過實驗我發現,在這種情況下,我必須在每個規則之前添加'* /'(或者在'!'之後)。然後它會工作。但是,如果我立即用'userdata/*','!userdata/* /'等命令啓動,**就不會**了。你能解釋一下原因嗎? – steve882 2013-03-22 10:17:04

+0

@ steve882:忽略模式中存在'/'將模式錨定到當前文件夾。作爲習慣的問題,我總是使用'/'作爲前綴來錨定它們,即使它們已經包含'/',所以我不必考慮它。 – 2013-03-22 18:02:13

相關問題