2015-05-27 121 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)正在努力增加这个功能:

但是,由于其中一个条件是“重新包含规则中的目录部分必须是文字(即无通配符)”,因此无论如何您都不能使用该功能。

相关问题