141

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

我想这会处理所有那些麻烦的无扩展名文件。

4

3 回答 3

158

您可以尝试类似以下的组合:

*
!/**/
!*.*

gitignore排除规则否定模式)应忽略所有文件,但具有扩展名的文件除外。

正如下面疯狂物理学家所说,规则是:

如果排除了该文件的父目录,则无法重新包含该文件。(*)
(*: 除非在 git 2.?+ 中满足某些条件,见下文)

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

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


正如Jakub Narębski 评论的那样,您可能不想忽略所有无扩展名文件。

我的建议:

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

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

git add -f -- myFile

请注意,使用 git 2.9.x/2.10(2016 年中?),如果路径中没有通配符 re-included ,则如果排除了该文件的父目录,则可能会重新包含该文件。

Nguyễn Thái Ngọc Duy ( pclouds)正在尝试添加此功能:

但是,由于重新包含的规则之一是:

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

无论如何,这在这里是行不通的。

于 2013-09-26T09:12:06.560 回答
69
*
!*/
!*.*

*告诉 git 忽略所有内容。

!*/然后忽略任何目录。这是至关重要的。

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

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

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

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

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

于 2015-07-09T19:17:54.390 回答
3

在我的文件夹中有很多带有*.c, *.h, *.txt, *.csvetc. 扩展名的文件和没有任何扩展名的二进制文件。所以我需要忽略所有文件 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
于 2018-12-20T15:15:19.480 回答