2015-05-19 96 views
0

我试图排除除了那些我需要以下.gitignore配置中的所有文件:Gitignore双星模式不起作用

*.* # Ignore all files 
*~ # Ignore temp files 
\#* # Ignore temp files 

!.gitignore 
!*.conf 
!**/*.conf 

然而,当我执行git status./postgresql/9.3/warm-standby/postgresql.conf没有显示文件。我如何解决我的.gitignore

的Git版本2.1.4

+0

看一看http://stackoverflow.com/questions/9162919/whitelisting-and-subdirectories-in-git –

回答

1

首先:信贷@EtanReisner为认真寻找到这一点,并@RetoAebersold提供正确的link

的问题是,用下面的语句(不是属于你.gitignore),你黑名单文件和目录

* 

现在,如果您像使用*.*那样使用,通常不会出现问题,因为大多数目录不包含点(.)。然而,你的确如此:

*   .* 
postgresql/9.3 

所以会发生什么是所有的目录都列入黑名单。为了能够在目录中添加文件,您首先需要将这些目录列入白名单。您可以使用线索做到这一点:

!*.*/ 

换句话说,将以斜线结尾的所有内容列入白名单。

现在你可以白名单的文件,以及:

!*.conf 

注意,白名单!**/*.conf是没有必要的(这甚至可能是不允许的,特别是因为两个连续的星号**在混帐1.8只启用*。 )。

一个更好的配置文件,从而读取:

*.* # Ignore all files 
*~ # Ignore temp files 
\#* # Ignore temp files 
!*/ 
!*.*/ 

!.gitignore 
!*.conf 
+0

这些建议的工作,如果我加' **/*'到我的'.gitignore','*。*'似乎只排除当前目录中的文件。这将是很好的更新答案 –

+0

通常'*。*'将禁用所有*文件/目录用点。你能再详细一点吗? –

+0

我有很多需要在子目录中排除的文件。 '*。*'似乎不排除它们,因此需要'**/*'或'**/*。*'才能递归工作。 –