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

Change in .gitignore handling: intended or bug?

From
Charles Strahan <charles@cstrahan.com>
Date
Mar 4, 2016, 02:11 UTC
Message-ID
<1457057516.1962831.539160698.3C8B30BC@webmail.messagingengine.com>
Hello,

I've found a change in the way .gitignore works, and I'm not sure if it's a bug or intended.

Previously, one could use the following .gitignore:
    *
    !/foo
    !/foo/bar.txt
    !/baz
    !/baz/quux
    !/baz/quux/**/*
And these files would be seen by git:
    foo/bar.txt
    baz/quux/grault.txt
    baz/quux/corge/wibble.txt
And these files would be ignored:
    foo/garply.txt
    baz/waldo.txt

At some point (between git 2.6.0 and 2.7.0, I think), the behavior changed such that _none_ of the files above would be ignored. Previously, git would treat !/foo as an indication that it should not prune /foo, but that _wouldn't_ be sufficient to un-ignore the contents thereof. Now, it seems the new scheme treats !/foo as functionally equivalent to !/foo followed by !/foo/**/* in the old scheme.

I manage my home directory by making it a git repo, and using ~/.gitignore to selectively permit certain files or subdirectories to be seen by git. The recent change in behavior has resulted in sensitive directories like ~/.gpg being un-ignored. For reference, I've appended my .gitignore to the end of this email.

So, is this behavior intended, or is this a bug? If the former, is there an announcement explaining this change?

-Charles
(.gitignore is as follows)

* !/.Xdefaults !/.Xresources !/.ackrc !/.bash_profile !/.config !/.config/dunst !/.config/dunst/dunstrc !/.config/taffybar !/.config/taffybar/taffybar.hs !/.config/taffybar/taffybar.rc !/.ctags !/.gdb !/.gdb/**/* !/.gdbinit !/.gemrc !/.ghci !/.git_template !/.git_template/**/* !/.gitexcludes !/.gitignore !/.gnupg !/.gnupg/dirmngr.conf !/.gnupg/gpg.conf !/.goobook/ !/.goobook/decipher !/.goobook/decipher/goobookrc !/.inputrc !/.irbrc !/.irssi !/.irssi/**/* !/.mbsyncrc !/.msmtprc !/.mutt !/.mutt/accounts !/.mutt/accounts/* !/.mutt/gpg.rc !/.mutt/mailcap !/.mutt/muttrc !/.mutt/signature !/.mutt/theme/* !/.nixpkgs !/.nixpkgs/**/* !/.notmuch-config !/.pystartup !/.tmux !/.tmux.conf !/.tmux/**/* !/.vim !/.vim/**/* !/.vimrc !/.xmonad !/.xmonad/xmonad.hs !/.xsession !/.zlogin !/.zprofile !/.zsh !/.zsh/**/* !/.zshenv !/.zshrc !/osx

Next: Duy Nguyen
Message 1 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.