2015-05-27 201 views
6

我有一個名爲/ static的目錄。其中有很多子目錄。 我需要忽略除.htaccess,null.jpg和index.php文件之外的/ static /目錄的所有子目錄中的所有文件。 請告訴我,此操作的正確語法是什麼?Gitignore排除了所有子目錄中的某些文件

/static/** 
!/static/**/.htaccess 

/static/* 
!/static/*/.htaccess 

不起作用。

+0

我認爲你應該首先將目錄列入白名單。在你的第一種方法中,「!/ static/** /」作爲第二行嗎? –

回答

6

正如我在 「Including specific file extension in gitignore」 提到,要記住的主要原則是:

It is not possible to re-include a file if a parent directory of that file is excluded. (*)
*:除非某些條件,在Git中2.?+相遇,見下文)

這就是爲什麼任何忽略文件夾(如**/)的規則都會排除不可能的子文件。

這就是爲什麼正確的做法是排除一切情況除外:

  • 文件夾,
  • 然後)要排除的文件。

如果不首先排除的文件夾,文件仍然會被忽略

所以加在你.gitignore(因爲我上面提到的規則):

/static/**/** 
!/static/**/ 
!.gitignore 
!.htaccess 

這是測試與Git 2.4.1並且可以在Windows上運行。


注意用git 2.9.x/2.10(2016年年中?),有可能再包括一個文件,如果該文件的父目錄排除if there is no wildcard in the path re-included

Nguyễn Thái Ngọc Duy (pclouds)正在努力增加這個功能:

但是,由於其中一個條件是「重新包含規則中的目錄部分必須是文字(即無通配符)」,因此無論如何您都不能使用該功能。

相關問題