From: Danial Alihosseini Date: Fri, 19 Nov 2021 17:06:04 GMT Subject: Re: git 2.34.0: Behavior of `**` in gitignore is different from previous versions. Message-ID: In-Reply-To: <72fffbff-16f7-fa17-b212-67aae9e1b034@gmail.com> Thanks Derrick. > What is unclear to me is what exactly "match a directory" means. > If we ignore a directory, then we ignore everything inside it (until > another pattern says we should care about it), but the converse > should also hold: if we have a pattern like "!data/**/", then that > should mean "include everything inside data// where is any > directory name". I think if we consider directory and files separately, it would be more clear. If a pattern in gitignore matches a directory, it is just about that directory and not about its contents. The contents are ignored by another rule which states: > It is not possible to re-include a file if a parent directory of that file is excluded. In our test case, the "data1" directory is ignored by the "data/**" pattern. However, the contents are ignored by two rules. One of them is that the parent ("data1") is not tracked. Another one is that the "data/**" pattern matches them. By adding the "!data/**/" pattern, the "data1" directory is re-included, but its contents are still ignored by the "data/**" pattern. I hope this will help to make the rules more clear. Thanks Danial