如何将文件中没有点的文件(所有扩展名文件)添加到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中通常如何工作的方式是一致的)。