gitignore 不会忽略子目录中的文件

gitignore doesn't ignore files in subdirectories

我是git的新手,尝试了解gitignore。到目前为止,我有一个我想排除的目录,名为 buildexcept 文件名称为 BUILD

build/**
!build/**/BUILD

但似乎 BUILD 文件也被排除在外。有谁知道我做错了什么?

resource/obj1/BUILD
resource/obj2/BUILD
resource/obj3/BUILD

如果要排除整个目录,则不必指定文件。

build

和git将忽略构建目录。

您需要先排除(白名单)文件夹,然后 BUILD/ 内容:

build/**
!build/**/
!build/**/BUILD/**

参见“.gitignore exclude folder but include specific subfolder

  • build/** ignores 个文件和文件夹,因此 build/aFolder/ 被忽略
  • !build/**/BUILD/** 尝试将文件列入 build/aFolder/BUILD/

但是:“如果文件的父目录被排除,则无法重新包含该文件。

并且:build/aFolder/ 是一个已经被忽略的文件夹。

因此:!build/**/BUILD/** 不适用。

除非:您首先取消忽略文件夹!build/**/(尾随的/很重要) :
build/aFolder/ 不再被忽略,即使 build/aFolder/<files> 仍然被 build/** 忽略。

Then!build/**/BUILD/**可以应用到文件夹BUILD/content(它的文件),因为文件夹 !build/aFolder/!build/aFolder/BUILD/ 被忽略。


然后检查这是否有效:

git check-ignore -v -- build/aFile
git check-ignore -v -- build/path/to/BUILD/aFile

第一个命令应该 return 一个 .gitignore 规则行。
第二个命令不应该 return 任何东西,因为文件不应该被忽略。