git - 不忽略子目录中的文件?

标签 git

我有以下 .gitignore 文件

*.pyc

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

!README.txt

到目前为止一切顺利,我的大部分 README.txt 文件都没有被忽略,就像我希望它发生一样,除了 project/ect/downloads/README.txt。该文件被忽略了。为什么是这样?我该如何解决这个问题?

如果我没记错的话,我可以简单地将它手动添加到我的项目中,但我想了解我在忽略该文件时做错了什么。

最佳答案

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

如果您排除 project/etc/,Git 将永远不会搜索该目录,因此否定的排除项永远不会应用于其内容(即使是像 !project/etc/important 这样明确的内容也不行) -file!—也许这可以被认为是一个错误?)。

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

你可能认为 project/etc/project/etc/* 是同一个意思,但是 Git 对它们的处理方式不同,因为它没有“意识到”第二个将匹配目录中的所有内容。

因此,要让 !README.txt 应用于 projects/etc/downloads/,您必须取消忽略该目录,但忽略其在 之前的内容!README 模式:

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

关于git - 不忽略子目录中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170137/

相关文章:

git - 你如何让 bash 函数像其他东西一样自动完成?

git - 在 Git 中强制添加子模块内容

git - 无需克隆即可列出和删除 git 分支

git - 我可以将本地分支映射到git中具有不同前缀的远程分支吗?

GitLens 无法在 Visual Studio Code 中 pull 推送

windows - git commit 以 emacs 作为 Windows 下的编辑器

git - 我如何 `git filter-branch` 多个子目录并保留其父目录?

wordpress - 如何在 PhpStorm 2019 中设置 Bitbucket

git - 无法访问 无法解析主机

git - 将两次提交之间的整个 git diff 保存在一个文本文件中