Git改变了“!” .gitignore的前缀行为?

时间:2018-12-13 00:00:24

标签: git gitignore

我在Git 2.7发行说明中找到了下面的句子。

  
      
  • 允许更高版本的“!/ abc / def”覆盖之前的“ / abc”   出现在同一.gitignore文件中,以便于表达   “ / abc目录中的所有内容都将被忽略,除了...”。

         

    Git 2.7 Release Notes

  •   

但是,此功能在后续版本中似乎无效。

$ 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的前缀行为?还是我弄错了?

1 个答案:

答案 0 :(得分:5)

看起来该更改已在2.8.0中恢复,为什么您只需要说git help ignore并告诉您

  
      
  • 可选的前缀“!”否定了模式;先前模式排除的所有匹配文件将再次包含在内。 如果排除了该文件的父目录,则无法重新包含该文件。 出于性能原因,Git不会列出排除的目录,因此包含的任何模式文件无论在何处定义都无效。在第一个“!”前面加上反斜杠(“ \”)。用于以文字“!”开头的模式,例如“!important!.txt”。
  •   

如果不想删除忽略目录,执行gitignores的简单方法是使用

忽略它们的全部内容。
directory/**

被任何替代(例如您的!directory/def)和gitignore put的结尾

!*/

之后是您真正打算实现的所有完全排除。