我在Git 2.7发行说明中找到了下面的句子。
允许更高版本的“!/ abc / def”覆盖之前的“ / abc” 出现在同一.gitignore文件中,以便于表达 “ / abc目录中的所有内容都将被忽略,除了...”。
但是,此功能在后续版本中似乎无效。
$ git --version
git version 2.19.1
$ cat .gitignore
/abc
!/abc/def
$ mkdir abc
$ echo foo > abc/def
$ git status
On branch master
nothing to commit, working tree clean
Git更改了“!” .gitignore的前缀行为?还是我弄错了?
答案 0 :(得分:5)
看起来该更改已在2.8.0中恢复,为什么您只需要说git help ignore
并告诉您
- 可选的前缀“!”否定了模式;先前模式排除的所有匹配文件将再次包含在内。 如果排除了该文件的父目录,则无法重新包含该文件。 出于性能原因,Git不会列出排除的目录,因此包含的任何模式文件无论在何处定义都无效。在第一个“!”前面加上反斜杠(“ \”)。用于以文字“!”开头的模式,例如“!important!.txt”。
如果不想删除忽略目录,执行gitignores的简单方法是使用
忽略它们的全部内容。directory/**
被任何替代(例如您的!directory/def
)和gitignore put的结尾
!*/
之后是您真正打算实现的所有完全排除。