git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git 2.34.0: Behavior of `**` in gitignore is different from previous versions.

From
DADanial Alihosseini <danial.alihosseini@gmail.com>
Date
Nov 23, 2021, 21:13 UTC
Message-ID
<CACLOEFYoqDsAhhHEMGXvtrkJLSpKdj8Rp1WtoBrPtJZbZN-s7Q@mail.gmail.com>
In-Reply-To
<09cbc27d-8fdf-ed84-716f-23fd8dbb11de@iee.email>
Show 17 quoted lines
>  * Git opens and reads the working tree directory.  For each file
>
>    or directory that is actually present here, Git checks it
>
>    against the ignore rules.  Some rules match only directories
>
>    and others match both directories and files.  Some rules say
>    "do ignore" and some say "do not ignore".
>  * The *last* applicable rule wins.
>  * If this is a file and the file is ignored, it's ignored.
>    Unless, that is, it's in the index already, because then it's
>    tracked and can't be ignored.
>  * If this is a directory and the directory is ignored, it's
>    not even opened and read.  It's not in the index because
>    directories are never in the index (at least nominally).
>    If it is opened and read, the entire set of rules here
>    apply recursively.
Show 16 quoted lines
> I do think it would be sensible for Git to read a `.gitignore`
>
> that says:
>
>     *
>
>     !a/b/c
>
> as meaning:
>     *
>     !a/
>     !a/b/
>     !a/b/c
> That is, declaring an un-ignored file within some ignored
> directory should automatically imply that we *must* un-ignore the
> parents.

Thanks, Chris. Yes, it mostly makes sense to me too. I think this will better describe the gitignore behavior. However, checking the indexed files at first may enhance it.

In addition to that, there should be an exception about negating patterns. For example, for the "!**/file.txt" pattern, it might be tricky to re-include all possible parents of "file.txt" files. You have to traverse directories to reach files and find out which parents to un-ignore. Any negating pattern with "**" at the beginning or in the middle of the pattern can make trouble. The existing rule which states the file cannot be re-included in case of ignored parents may help to prevent this.

Thanks Danial

Previous: Philip Oakley
Message 13 of 13 in “git 2.34.0: Behavior of `**` in gitignore is different from previous versions.”
  1. Danial AlihosseiniNov 18, 2021
  2. Jeff KingNov 18, 2021
  3. Derrick StoleeNov 18, 2021
  4. Danial AlihosseiniNov 19, 2021
  5. Derrick StoleeNov 19, 2021
  6. Danial AlihosseiniNov 19, 2021
  7. Johannes SixtNov 19, 2021
  8. Derrick StoleeNov 19, 2021
  9. Ævar Arnfjörð BjarmasonNov 19, 2021
  10. Chris TorekNov 20, 2021
  11. Junio C HamanoNov 21, 2021
  12. Philip OakleyNov 23, 2021
  13. Danial AlihosseiniNov 23, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.