什么"!" 在gitignore文件中?

Vin*_*ang 4 git github gitignore

我不太明白这一点

我已经从https://git-scm.com/docs/gitignore上阅读了官方文档

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

我有这个gitignore文件

/media/*
!/media/xmlconnect
Run Code Online (Sandbox Code Playgroud)

这究竟是做什么的?我忽略了里面的所有子目录/media/,但是我做了一个例外/media/xmlconnect(例如我不是它的gitignoring吗?)

所以基本上我是gitignoring所有的东西,但media/xmlconnect

小智 9

确切地说,这用于取消忽略在该行之前被忽略的路径.您的示例说明了用例非常好.

除了xmlconnect,你忽略了媒体内部的一切.


sla*_*lal 7

/media/*
Run Code Online (Sandbox Code Playgroud)

上面忽略了 media 内的所有文件

但是,如果您想例外并且不想忽略 media/xmlconnect,那么您可以使用!.

!/media/xmlconnect
Run Code Online (Sandbox Code Playgroud)

当您执行 a 时git add .,只会将 media/xmlconnect 添加到 git,其余 media 内的所有其他文件都不会添加。

编辑:颠倒 .gitignore 中的顺序:

Git applies patterns in .gitignore in order of appearance,所以如果我们颠倒顺序并 !/media/xmlconnect位于之前/media/*,它将忽略 media 目录中的所有文件。

您可以查看此问题以了解建议的修复方案。