项目根目录中的 .gitignore 不会被子目录中的 .gitignores 覆盖

Hai*_*iri 5 git tortoisegit

在项目根目录中,我有.gitignore一个文件忽略除 gitignore 文件之外的所有内容。这是文件的内容:

**/*
!.gitignore
Run Code Online (Sandbox Code Playgroud)

然后implementation/xml/我有另一个包含以下内容的 gitignore 文件:

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

然后在implementation/xml/ant/中我创建了名为texd-odt-build.xml完整路径的新文件(/implementation/xml/ant/texd-odt-build.xml)的新文件。

现在是第二个 gitignore 文件,它位于项目根目录中的文件(gitignore 文件)下面的两个文件夹中。那么第二个 gitignore 应该覆盖根目录中的那个,对吧?但使用 bash 我发现它 texd-odt-build.xml仍然在忽略列表中。

为了检查它,我使用了这个命令:git status --ignored。“孩子”gitignore 不工作的原因可能是什么?

Von*_*onC 3

注意:要检查文件是否被忽略,请使用git check-ignore

\n\n
git check-ignore -v -- afile\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如我在“如何将不带点的文件(所有无扩展名文件)添加到文件中gitignore ”中提到的,主要需要记住一条规则.gitignore

\n\n

如果排除某个文件的父目录,则无法重新包含该文件。( \xe2\x80\xa0)
\n(\xe2\x80\xa0 : 除非 git 2.7+ 中满足某些条件)

\n\n

这意味着,当您排除所有内容 (\'* \') 时,您必须先将文件夹列入白名单,然后才能将文件列入白名单。

\n\n
# Ignore everything under node_modules\n*\n\n# Except for the subfolders\n!**/\n\n# Except for the .gitignore\n!.gitignore\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后在 中implementation\\xml,您可以从.gitignore(因为其文件夹和子文件夹已列入白名单)

\n\n
implementation\\xml\\.gitignore:\n\n!*\n
Run Code Online (Sandbox Code Playgroud)\n