如何将没有点的文件(所有无扩展名文件)添加到gitignore文件?

时间:2013-09-26 08:51:12

标签: git gitignore

就像标题所说,是否可以在gitignore文件中添加“没有点的文件”?

我想这会照顾所有那些烦人的无扩展文件。

3 个答案:

答案 0 :(得分:88)

您可以尝试类似的组合:

*
!/**/
!*.*

gitignore exclusion rule(a negated pattern)应该忽略所有文件,但扩展名除外。

正如below提到的Mad Physicist,规则是:

It is not possible to re-include a file if a parent directory of that file is excluded. *
*:除非在git 2.?+中满足某些条件,请参见下文)

这就是为什么!/**/很重要(如果我们想要白名单文件,那么递归地列出父文件夹)。

我在类似的情况下提到过相同的规则,如:


作为Jakub Narębski comments,您可能不想忽略所有无扩展名文件。

我的建议:

  • 首先添加重要的无扩展名文件
  • 然后如上所示编辑您的.gitignore:不会忽略已经版本化的文件(即使它们没有扩展名)。所有其他人都将被忽略。

对于您希望版本的任何未来无扩展名文件:

git add -f -- myFile

请注意,使用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)正在尝试添加此功能:

但是,由于重新加入的规则之一是:

  

重新包含规则中的目录部分必须是文字(即没有通配符)

无论如何,这不会有效。

答案 1 :(得分:36)

*
!*/
!*.*

*告诉git忽略所有内容。

!*/然后取消任何目录的任何内容。这很重要。

!*.*取消所有带扩展名的文件。

如果没有!*/规则,则不会列出名称中没有.的目录,也不会在根文件夹之外添加所需的文件。

作为参考,请阅读.gitignore documentation中的这两部分:

  

可选前缀“!”否定了这种模式;任何匹配的文件   被先前模式排除的将被再次包括在内。它不是   如果该文件的父目录是,则可以重新包含文件   排除。 Git没有列出性能排除的目录   原因,所以包含文件的任何模式都没有效果,无论如何   他们被定义的地方。在第一个前面放一个反斜杠(“\”)   “!”对于以文字“!”开头的模式,例如,   “!重要!.TXT”。

     

如果图案以斜线结尾,则会将其删除   以下描述,但它只会找到一个匹配   目录。换句话说,foo /将匹配目录foo和路径   在它下面,但不匹配常规文件或符号链接   foo(这与pathspec一般工作的方式一致   GIT)。

答案 2 :(得分:0)

在我的文件夹中,有许多带有*.c, *.h, *.txt, *.csv等扩展名的文件和没有任何扩展名的二进制文件。因此,我需要忽略所有文件execpt *.c,*.h.gitignore,因此对于.gitignore示例来说,这对我有用:

 */*         #ignore all files in each directory
 !*/*.c      #unignore .c files in each directory
 !*/*.h      #unignore .h header files in each directory
 !.gitignore #unignore .gitignore