2013-05-21 102 views
8

我有以下文件夾結構:gitignore目錄例外

public 
    media 
     catalog 
      product 
      category 
     private 
     tmp 
     var 
     test 

我想gitignore在media目錄的一切,除了catalog/categoryprivate

我gitignore我想的是:

public/media/* 
!public/media/catalog/category/ 
!public/media/private 

但它不起作用。添加到categoryprivate目錄的任何新文件都無法添加。

我可以git的補充力量,但我想如果可能的話

+0

請參見以下問題非常類似:http://stackoverflow.com/questions/7001126/git-ignore-all-except-subfolder – greydet

回答

7

它通常是簡單的投入只是一個.gitignore在它開始重要的一級,這通過gitignore完成。 (這也幫助,如果你曾經分裂一個倉庫或移動目錄。)在這種情況下,你需要這樣的public/media/.gitignore放無視一切,除了在public/media文件夾catalogprivate

/* 
!/catalog/ 
!/private/ 

public/media/catalog/.gitignore地說:

/* 
!/category/ 

是非常重要的(和你的規則是不工作的原因)不能忽略public/media/catalog目錄本身,在它否則一切都將被忽略,即使你不想忽略的特定部分的內容。

當然,你也可以合併成一個單一的這種忽略在public/media水平,如果你喜歡:

/* 
!/catalog/ 
!/private/ 
/catalog/* 
!/catalog/category/ 
+0

好吧,這個作品。它實際上有點痛苦,因爲我有一個不錯的gitignore,但現在有3個。但它的作品謝謝 –

+0

@MartyWallace:如果你願意,你可以有一個'.gitignore'(我在我的回答中只計算了2個) ,我只是發現模式變得更復雜。 –

2

解決方案與根一級的.gitignore

您嘗試使用一個.gitignore文件在存儲庫的根級別。和你一樣,我通常也會像這樣集中所有的忽視來保持整潔。在這種情況下,這很難,因爲「如果排除該文件的父目錄,則不可能重新包含文件」[source]。

我對這個限制,這也是我探索我的相關答案herehere醜陋的解決方案:重新之前包含沿該路徑的所有父目錄重新包括您需要的文件,而在這些父目錄中保存的其他文件出來的重新排除它們。

就這樣,你.gitignore模式將是:

public/media/** 
!public/media/private 
!public/media/catalog/ 

public/media/catalog/** 
!public/media/catalog/category/