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

Re: Change in .gitignore handling: intended or bug?

From
Duy Nguyen <pclouds@gmail.com>
Date
Mar 9, 2016, 09:48 UTC
Message-ID
<CACsJy8AUs-DAo-GceO9ND9RPVeDOfm_UM4ZuaeNWDwBVMu+dnQ@mail.gmail.com>
In-Reply-To
<xmqqbn6olu1w.fsf@gitster.mtv.corp.google.com>
On Wed, Mar 9, 2016 at 1:10 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 10 quoted lines
> diff --git a/Documentation/gitignore.txt b/Documentation/gitignore.txt
> index 3ded6fd..91d1ce2 100644
> --- a/Documentation/gitignore.txt
> +++ b/Documentation/gitignore.txt
> @@ -148,7 +148,43 @@ excluded, the following conditions must be met:
>     be in the same .gitignore file.
>
>   - The directory part in the re-include rules must be literal (i.e. no
> -   wildcards)
> +   wildcards and has to start with a `/`).

Technically '/' can just appear anywhere in the pattern, except at the end. But because the patterns in question must look like this

    dir # or any pattern, even "*"
    !dir/someth*ng

even if there is a slash at the end (and is ignored), we are still good. Not sure how to phrase that though.

Show 36 quoted lines
> +
> +A re-inclusion of a directory makes all files in the directory
> +unignored.  For example, suppose you have files `.gitignore`,
> +`dir/file1`, `dir/file2`, and `dir/file3`, and have the following in
> +your `.gitignore`:
> +
> +----------------
> +# .gitignore is not mentioned in .gitignore
> +*
> +!/dir
> +# dir/file1 is not mentioned in .gitignore
> +dir/file2
> +!dir/file3
> +----------------
> +
> +Then:
> +
> + - `.gitignore` gets ignored, because it matches the `*` at the top
> +   level;
> +
> + - `dir/file1` does not get ignored, because `/dir` marks everything
> +   underneath `dir/` directory to be 're-included' unless otherwise
> +   specified;
> +
> + - `dir/file2` gets ignored, because `dir/file2` matches it.
> +
> + - `dir/file3` does not get ignored, because `!dir/file3` matches it.
> +   Note that the entry `!dir/file3` is redundant because everything
> +   underneath `dir/` is marked to be 're-included' already.
> +
> +Some earlier versions of Git treated `!/dir` above differently in
> +that it did not cause the paths under it unignored (but merely told
> +Git that patterns that begin with dir/ should not be ignored), but
> +this has been corrected to be consistent with `/dir` that says "the
> +directory `dir/` and everything below are ignored."
> +
Looks good.
-- 
Duy
Previous: Duy NguyenNext: Junio C Hamano
Message 23 of 28 in “Change in .gitignore handling: intended or bug?”
  1. Charles StrahanMar 4, 2016
  2. Duy NguyenMar 4, 2016
  3. Kevin DaudtMar 4, 2016
  4. Charles StrahanMar 4, 2016
  5. Kevin DaudtMar 4, 2016
  6. Duy NguyenMar 4, 2016
  7. Junio C HamanoMar 4, 2016
  8. Junio C HamanoMar 4, 2016
  9. Duy NguyenMar 5, 2016
  10. Duy NguyenMar 5, 2016
  11. Charles StrahanMar 5, 2016
  12. Junio C HamanoMar 5, 2016
  13. Junio C HamanoMar 7, 2016
  14. Junio C HamanoMar 8, 2016
  15. Duy NguyenMar 8, 2016
  16. Junio C HamanoMar 8, 2016
  17. Duy NguyenMar 9, 2016
  18. Junio C HamanoMar 9, 2016
  19. Junio C HamanoMar 9, 2016
  20. dir.c: fix dir re-inclusion rules with "NODIR" and "MUSTBEDIR"Nguyễn Thái Ngọc Duy, Mar 9, 2016
  21. Junio C HamanoMar 9, 2016
  22. Duy NguyenMar 10, 2016
  23. Duy NguyenMar 9, 2016
  24. Junio C HamanoMar 9, 2016
  25. Duy NguyenMar 10, 2016
  26. Junio C HamanoMar 10, 2016
  27. Junio C HamanoMar 10, 2016
  28. Duy NguyenMar 10, 2016

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.