Answers:
您可以尝试类似的组合:
*
!/**/
!*.*
该gitignore
排除规则(否定的模式)应忽略所有文件(带有扩展名的文件除外)。
如果排除了该文件的父目录,则无法重新包含该文件。(*
)
(*
:除非git 2.中满足某些条件?? +,请参见下文)
这就是为什么!/**/
要对文件进行白名单的重要性(将父文件夹递归地白名单)的原因。
我在类似的情况下提到了相同的规则:
正如JakubNarębski 所说,您可能不想忽略所有无扩展名的文件。
我的建议:
.gitignore
如上所示编辑您的文件:已经版本化的文件将不会被忽略(即使它们没有扩展名)。所有其他的将被忽略。对于将来要版本的任何无扩展名文件:
git add -f -- myFile
请注意,使用git 2.9.x / 2.10(2016年中吗?),如果重新包含的路径中没有通配符,则如果排除了该文件的父目录,则可以重新包含该文件。
NguyễnTháiNgọcDuy(pclouds
)试图添加此功能:
但是,由于重新包含的规则之一是:
重新包含规则中的目录部分必须为原义(即没有通配符)
无论如何,这在这里是行不通的。
.gitignore
会**
和!**.*
。我知道如果将星号放在前面不会有什么区别,但是对于贝壳处理通配符的方式来说,它会更明确,更合理...
**
被添加到Git中1.8.2
。使用!*/
代替有什么缺点!/**/
吗?
*
!*/
!*.*
*
告诉git忽略一切。
!*/
然后忽略任何目录。这很关键。
!*.*
取消所有带有扩展名的文件。
如果没有该!*/
规则,则.
不会列出名称中不带a的目录,并且不会在根文件夹之外添加任何所需文件。
作为参考,请阅读.gitignore文档中的这两个部分:
可选的前缀“!” 否定了模式;先前模式排除的所有匹配文件将再次包含在内。如果排除了该文件的父目录,则无法重新包含该文件。由于性能原因,Git不会列出被排除的目录,因此包含在文件上的任何模式无论在何处定义都无效。在第一个“!”前面加上反斜杠(“ \”)。以文字“!”开头的模式,例如“!important!.txt”。
如果该模式以斜杠结尾,则出于以下描述的目的将其删除,但它只会找到与目录匹配的内容。换句话说,foo /将匹配目录foo及其下的路径,但不匹配常规文件或符号链接foo(这与pathspec通常在Git中的工作方式一致)。
在我的文件夹中,有很多带有*.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
README
,LICENSE
或COPYING
,INSTALL
,Makefile
等等,虽然你总是可以强制添加它们,然后他们被跟踪