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

正如标题所说,是否有可能向 gitignore 文件中添加“不带圆点的文件”?

我想这样就能解决那些烦人的没有扩展名的文件了。

40744 次浏览

你可以试试这样的组合:

*
!/**/
!*.*

gitignore排除规则(一个 否定模式)应该忽略所有文件,除了那些带有扩展名的文件。

正如 疯狂物理学家提到的 下面,规则是:

如果文件的父目录被排除在外,就不可能重新包含该文件。 (*)
(*: 除非在 git2. ? + 中满足某些条件,见下文)

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

我在类似的案例中提到了同样的规则,比如:


作为 Jakub Nar bski 评论,您可能不希望忽略 所有无扩展文件。

我的建议是:

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

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

git add -f -- myFile

请注意,git 是2.9。X/2.10(2016年年中?),如果文件的父目录被排除在 如果重新包含的路径中没有通配符,则为之外,则可能重新包含该文件。

Nguy n Thái Ng Coy (pclouds) 正在尝试添加这个功能:

然而,由于重新纳入的规则之一是:

Re-include 规则中的目录部分必须是原义的(即没有通配符)

反正在这里也没用。

*
!*/
!*.*

*告诉 git 忽略一切。

然后,!*/取消忽略目录中的任何内容。这是至关重要的。

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

如果没有 !*/规则,名称中没有 .的目录将不会被列出,您所需要的任何文件都不会添加到根文件夹之外。

作为参考,请阅读 。吉蒂诺尔文件中的以下两节:

可选的前缀“ !”否定模式; 任何匹配的文件 被以前的模式所排除的资料将会再次被包括在内 如果文件的父目录为 Git 没有为性能列出被排除的目录 原因,所以包含的文件上的任何模式都没有效果,无论 在它们被定义的地方。在第一个前面放一个反斜杠(“”) 例如,对于以“ !”开头的模式, “ ! 重要! . txt”。

如果该模式以斜杠结束,则为了 但它只能找到与 换句话说,foo/将匹配目录 foo 和路径 但不会匹配常规文件或符号链接 Foo (这与一般的 pathspec 工作方式是一致的 Git).

在我的文件夹中有很多带有 *.c, *.h, *.txt, *.csv等扩展名的文件和没有任何扩展名的二进制文件。所以我需要忽略除了 *.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