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

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

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

您可以尝试类似的组合:

 * !/**/ !*.* 

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

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

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

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

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

  • Gitignore除了一个文件夹及其所有内容 – 不pipe嵌套级别如何
  • Git除了一个子目录,它是一个被忽略的目录的文件
  • Gitignore排除所有子目录中的某些文件

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

我的build议:

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

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

 git add -f -- myFile 

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

NguyễnTháiNgọcDuy( pclouds )试图添加此function:

  • 为git v2.7.0 提交506d8f1 ,在提交76b620d中恢复git v2.8.0-rc0
  • 提交5e57f9c git v2.8.0-rc0,…在提交5cee3493 git 2.8.0-rc4恢复(!)。

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

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

无论如何,这不会有效。

 * !*/ !*.* 

*告诉git忽略一切。

!*/然后取消任何是目录的东西。 这是至关重要的。

!*.*使用扩展名取消所有文件的签名。

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

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

一个可选的前缀“!” 否定了这种模式; 任何先前模式排除的匹配文件将再次包含在内。 如果排除该文件的父目录,则不可能重新包含文件。 由于性能的原因,Git没有列出排除的目录,所以包含文件的任何模式都不起作用,不pipe它们在哪里定义。 在第一个“!”前加一个反斜杠(“\”) 对于以“!”开头的模式,例如“!important!.txt”。

如果模式以斜线结尾,则为了以下描述的目的将其移除,但是它只能find与目录匹配的内容。 换句话说,foo /会匹配一个目录foo和它下面的path,但是不会匹配一个普通的文件或符号链接foo(这与在Git中通常如何工作的方式是一致的)。