bang似乎不排除.gitignore中的文件

时间:2017-01-10 00:59:18

标签: git

我有一个foo目录,其中包含2个文件,barbaz。我在.gitignore目录上方有以下foo文件:

foo/
!foo/baz

我希望这会忽略foo目录中的所有内容,但忽略baz

但是,foo中的所有内容仍然被忽略。如果我运行git check-ignore foo/*,我会得到:

foo/bar
foo/baz

我做错了什么?

1 个答案:

答案 0 :(得分:3)

.gitignore

不支持该特定公式
  

可选前缀" !"否定了这种模式;任何匹配的文件   被先前模式排除的将被再次包括在内。它不是   如果该文件的父目录是,则可以重新包含文件   排除。 Git没有列出性能排除的目录   原因,所以包含文件的任何模式都没有效果,无论如何   他们被定义的地方。在第一个前面放一个反斜杠(" \")   " !"对于以文字" !"开头的模式,例如,   " \!important!.txt"

相反,您可以这样做:

foo/*
!foo/baz

这是一个示例会话,以便您可以看到它的实际效果:

:: tree
.
`-- foo/
    |-- bar
    `-- baz

:: cat .gitignore
foo/*
!foo/baz

:: git status -sb
## Initial commit on master
?? .gitignore
?? foo/

:: git add foo
:: git status -sb
## Initial commit on master
A  foo/baz
?? .gitignore

请注意,添加了baz但忽略了bar。

如果baz不在foo中,看看会是什么样子,我们可以重置然后删除baz:

:: git reset
:: rm foo/baz
:: git status -sb
## Initial commit on master
?? .gitignore

请注意,即使foo / bar仍然存在,foo也不会显示在此处。