I'm on 2.7.0.
Here's a quick sanity check:
├── baz
│ ├── quux
│ │ ├── corge
│ │ │ └── wibble.txt
│ │ └── grault.txt
│ └── waldo.txt
└── foo
├── bar.txt
└── garply.txt
$ git --version
git version 2.7.0
$ git status -sb -uall
## Initial commit on master
?? baz/quux/corge/wibble.txt
?? baz/quux/grault.txt
?? baz/waldo.txt
?? foo/bar.txt
?? foo/garply.txt
For the lazy (such as myself), this will set up an identical tree:
mkdir -p foo
mkdir -p baz/quux/corge
touch foo/bar.txt
touch foo/garply.txt
touch baz/waldo.txt
touch baz/quux/grault.txt
touch baz/quux/corge/wibble.txt
cat <<"EOF" > .gitignore
*
!/foo
!/foo/bar.txt
!/baz
!/baz/quux
!/baz/quux/**/*
EOF
I just checked https://git-scm.com/docs/gitignore and the example at the
bottom
suggests that this behavior may be expected:
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
Note the /foo/*, explicitly ignoring the entries below /foo.
This wasn't always the case, though, so I'd love to hear if it was
intentional
(or if I've lost my mind, which is quite possible).
-Charles
On Fri, Mar 4, 2016, at 12:51 AM, Kevin Daudt wrote:
> On Thu, Mar 03, 2016 at 09:11:56PM -0500, Charles Strahan wrote:
> > 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
> >
> > [snip]
> > --
> > To unsubscribe from this list: send the line "unsubscribe git" in
> > the body of a message to [email protected]
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
>
> Works as intended for me:
>
> ├── baz
> │ ├── quux
> │ │ ├── corge
> │ │ │ └── wibble.txt
> │ │ └── grault.txt
> │ └── waldo.txt
> └── foo
> ├── bar.txt
> └── garply.txt
>
> $ git status -s -uall
> ?? baz/quux/corge/wibble.txt
> ?? baz/quux/grault.txt
> ?? foo/bar.txt
>
> garply.txt and waldo.txt are ignore, but the rest is still tracked.
>
> I'm on 2.7.2.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html