Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 不忽略子目录中的文件?_Git - Fatal编程技术网

Git 不忽略子目录中的文件?

Git 不忽略子目录中的文件?,git,Git,我有以下.gitignore文件 *.pyc project/app/dist/* project/bin/* project/etc/* project/var/* !README.txt 到目前为止,我的大部分README.txt文件都没有被忽略,就像我希望它发生一样,除了project/ect/downloads/README.txt。正在忽略该文件。为什么会这样?我怎样才能解决这个问题 如果我没记错的话,我可以简单地手动将其添加到我的项目中,但我想知道我忽略该文件的错误之处。在.g

我有以下
.gitignore
文件

*.pyc

project/app/dist/*
project/bin/*
project/etc/*
project/var/*

!README.txt
到目前为止,我的大部分
README.txt
文件都没有被忽略,就像我希望它发生一样,除了
project/ect/downloads/README.txt
。正在忽略该文件。为什么会这样?我怎样才能解决这个问题


如果我没记错的话,我可以简单地手动将其添加到我的项目中,但我想知道我忽略该文件的错误之处。

在.gitignore文件中,在/project/etc/*之后添加两行:

!/project/etc/downloads/ /project/etc/downloads/* !/project/etc/下载/ /project/etc/下载/*
Git不会在
project/etc/downloads/
中搜索任何文件,因为您已将其配置为忽略
project/etc/*
。“未编排的”
!README.txt
模式仅适用于取消将要搜索的目录(即本身未被排除的目录)中条目的排除

如果排除
project/etc/
,Git将永远不会搜索该目录,因此否定排除永远不会应用于其内容(即使是像
!project/etc/important file
!-这可能被认为是一个bug?)

但是,如果排除
project/etc/*
,Git将搜索该目录,否定排除可以应用于其内容。人们可能会意识到第二种模式将始终匹配所有文件,并为两种模式赋予相同的含义,但是Git,但是Git对待它们的方式不同

你可以考虑<代码> Project /ETC/<代码>和<代码> Project /ETC/*>代码>,意思是相同的东西,但是Git对待它们不同,因为它没有意识到第二个将匹配目录中的所有东西。 因此,要获得

!README.txt
要在
projects/etc/downloads/
中应用,您必须取消对目录的命名,但在
之前忽略其内容!自述文件
模式:

project/etc/*

# "unignore, but ignore the immediate contents of" project/etc/downloads
# so that subsequent negated patterns can apply to the immediate contents
!project/etc/downloads/
project/etc/downloads/*

!README.txt

注意:这些必须在
之前!README.txt
模式,对排除
项目/etc/downloads/*
感谢您的深入回复!我从来没有想到过unignore ignore/*方法:)为ping一个旧帖子道歉,但在关于这个问题的三个不同变体的近十几个答案中,这是我见过的第一个真正令人满意的解决方案。非常感谢!“忽略”列表必须以
*
结尾。类似于
public/
的东西仍然会忽略下一行中的unignore,它必须是
public/*