3 回答
TA贡献1828条经验 获得超3个赞
您可以尝试类似的组合:
*
!/**/
!*.*
该gitignore排除规则(否定的模式)应忽略所有文件(带有扩展名的文件除外)。
如前所述下面通过疯狂的物理学家,规则是:
如果排除该文件的父目录,则无法重新包含该文件。(*)
(*:除非git 2.中满足某些条件?? +,请参见下文)
这就是为什么!/**/要对文件进行白名单很重要(将父文件夹递归地白名单)的原因。
我在类似的情况下提到了相同的规则:
Gitignore忽略除一个文件夹及其所有内容以外的所有内容-无论嵌套级别如何
除了子目录及其被忽略目录的文件外的Git
Gitignore排除所有子目录中的某些文件
正如JakubNarębski 所说,您可能不想忽略所有无扩展名的文件。
我的建议:
首先添加重要的无扩展名文件
然后.gitignore如上所示编辑您的文件:已经版本化的文件将不会被忽略(即使它们没有扩展名)。所有其他的将被忽略。
对于将来要版本的任何无扩展名文件:
git add -f -- myFile
请注意,在git 2.9.x / 2.10(2016年中?)下,如果重新包含的路径中没有通配符,则如果排除了该文件的父目录,则可以重新包含该文件。
NguyễnTháiNgọcDuy(pclouds)试图添加此功能:
提交 git v2.7.0的506d8f1,已在提交76b620d git v2.8.0-rc0中恢复
在5cee3493 git 2.8.0-rc4中还原(!)5e57f9c git v2.8.0-rc0,... reverted(!)
但是,由于重新包含的规则之一是:
重新包含规则中的目录部分必须为原义(即没有通配符)
无论如何,这在这里是行不通的。
TA贡献1900条经验 获得超5个赞
*
!*/
!*.*
* 告诉git忽略一切。
!*/然后忽略任何目录。这很关键。
!*.* 取消所有带有扩展名的文件。
如果没有该!*/规则,则.不会列出名称中不带a的目录,并且不会在根文件夹之外添加任何所需文件。
作为参考,请阅读.gitignore文档中的这两个部分:
可选的前缀“!” 否定了模式;先前模式排除的所有匹配文件将再次包含在内。如果排除该文件的父目录,则无法重新包含该文件。由于性能原因,Git不会列出被排除的目录,因此包含在文件上的任何模式(无论它们在何处定义)都无效。在第一个“!”前面加上反斜杠(“ \”)。以文字“!”开头的模式,例如“!important!.txt”。
如果该模式以斜杠结尾,则出于以下描述的目的将其删除,但它只会找到与目录匹配的内容。换句话说,foo /将匹配目录foo及其下的路径,但不匹配常规文件或符号链接foo(这与pathspec通常在Git中的工作方式一致)。
TA贡献1875条经验 获得超5个赞
在我的文件夹中,有很多带有*.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
- 3 回答
- 0 关注
- 1009 浏览
添加回答
举报