什么“!”在gitignore文件中做什么?

时间:2017-06-01 16:25:57

标签: git github gitignore

我不太明白这个

我已经从https://git-scm.com/docs/gitignore

阅读了官方文档
  

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

我有这个gitignore文件

/media/*
!/media/xmlconnect

这究竟是做什么的?我忽略了/media/中的所有子目录,但我是否对/media/xmlconnect做了例外(例如,我不对它进行gitignoring吗?)

所以基本上我除了media/xmlconnect之外还有其他所有东西?

2 个答案:

答案 0 :(得分:8)

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

除了xmlconnect,你忽略了媒体内的所有内容。

答案 1 :(得分:2)

/media/*

以上忽略了媒体内的所有文件

但是,如果要创建例外并且不想忽略media / xmlconnect,则使用!

!/media/xmlconnect

执行git add .时,只有media / xmlconnect会被添加到git中,所以其他文件不会被添加到媒体中。

编辑:撤销.gitignore中的顺序:

Git applies patterns in .gitignore in order of appearance,所以如果我们改变订单并且 !/media/xmlconnect出现在/media/*之前,它会忽略媒体目录中的所有文件。

您可以查看此issue以了解所提出的解决方案。