2013-07-23 42 views
52

我看過類似的問題(123),但我沒有從它們中找到適當的解決方案。正確地忽略特定文件夾下的所有文件,除了特定的文件類型

我需要忽略除特定文件類型以外的特定文件夾下的所有文件。該文件夾是根路徑的子目錄。讓我命名文件夾Resources。由於我不想讓事情變得複雜,所以讓我忽略所有名爲Resources的文件夾下的文件,無論它在哪裏。

這是最常見的解決方案(在所有重複的問題)

# Ignore everything 
* 

# Don't ignore directories, so we can recurse into them 
!*/ 

# Don't ignore .gitignore 
!.gitignore 

# Now exclude our type 
!*.foo 

這個解決方案的問題是,它跟蹤停止新增文件(因爲*忽略所有文件)。我不想排除每種文件類型。我想要正常的行爲,如果添加任何新文件,git status顯示它。

我終於找到了解決方案here。解決方案是在Resources文件夾中添加另一個.gitignore文件。這工作正常。

我可以用一個忽略文件實現相同嗎?我發現在不同目錄中有許多忽略文件有點笨重。

這就是我想要實現:

# Ignore everything under Resources folder, not elsewhere 
Resources 

# Don't ignore directories, so we can recurse into them 
!*Resources/ 

# Now exclude our type 
!*.foo 

但是這給輸出相反。它忽略了*.foo類型並跟蹤其他文件。

回答

70

@SimonBuchan is correct.

由於git的1.8.2,Resources/** !Resources/**/*.foo作品。

+1

這適用於我,稍作調整,我只需要刪除目錄和下面的所有內容,所以我做了:'DirectoryName1/** DirectoryName1/**/*'爲他們每個人。杉木刪除目錄,但你需要第二刪除所有文件類型。 –

22

最好的答案是增加一個資源/ .gitignore文件以在資源包含:

# Ignore any file in this directory except for this file and *.foo files 
* 
!/.gitignore 
!*.foo 

如果您不願意或無法添加的.gitignore文件,有一個不雅的解決方案:

# Ignore any file but *.foo under Resources. Update this if we add deeper directories 
Resources/* 
!Resources/*/ 
!Resources/*.foo 
Resources/*/* 
!Resources/*/*/ 
!Resources/*/*.foo 
Resources/*/*/* 
!Resources/*/*/*/ 
!Resources/*/*/*.foo 
Resources/*/*/*/* 
!Resources/*/*/*/*/ 
!Resources/*/*/*/*.foo 

如果添加比指定更深的目錄,則需要編輯該模式。

+2

多數民衆贊成在悲傷..事實上,我會有更深的目錄,所以我會堅持第一個:( – nawfal

+0

請參閱相同的解決方案在這裏進一步的細節:http://stackoverflow.com/questions/7803689/gitignore-ignore-all -files-in-folder-hierachy-except-one-specific-filetype - 也由OP @nawfal – here

+30

鏈接上面由於git 1.8.2,'Resources/**''!Resources/**/*。foo'工程 –

1

這可能看起來很愚蠢,但請檢查您是否尚未將您試圖忽略的文件夾/文件添加到索引中。如果你這樣做了,你放在.gitignore文件中的內容並不重要,文件夾/文件仍然會被放置。

相關問題