Re: Git 1.7.6: Sparse checkouts do not work with directory exclusions
- From
Joshua Jensen <jjensen@workspacewhiz.com>
- Date
- Sep 20, 2011, 15:22 UTC
- Message-ID
- <4E78AFC7.4050102@workspacewhiz.com>
- In-Reply-To
- <CACsJy8CDtswtPJVt-T911_1y0WqShonvcCbXhFtWu2zjEqLa4A@mail.gmail.com>
----- Original Message ----- From: Nguyen Thai Ngoc Duy Date: 9/20/2011 4:09 AM
Show 33 quoted lines
> On Tue, Sep 20, 2011 at 8:03 AM, Joshua Jensen > <jjensen@workspacewhiz.com> wrote: >> Sometime after Git 1.7.3.2, sparse checkouts stopped working for me. My >> sparse-checkout file looks something like: >> >> * >> !DirA/ >> !DirB/ >> DirC/ > Confirmed. It got me wonder why the negated pattern tests did not > catch this. Turns out this works: > > /* > !DirA/ > !DirB/ > DirC > > This is my theory why yours does not work: negated patterns !DirA and > !DirB excludes both directories, but git still descends in them > because you may have other patterns that re-include parts of > DirA/DirB, for example: > > DirA/DirD > !DirA > > When it's in DirA/DirB, "*" tells git to match everything (equivalent > "DirA/*" and "DirB/*"), so it matches all entries in DirA/DirB again, > essentially reverting "!DirA" and "!DirB" effects. > > By using "/*" instead of "*", we tell git to just match entries at top > level, not all levels. > > I think it makes sense, but it's a bit tricky.
I can confirm this fix works for me, but it is certainly tricky. IMO, it should either be documented or some kind of fix should be added to a future version of Git to allow * by itself to work again.
>> and describe why those lines were removed? > Quotes from 9e08273: "The commit provided a workaround for matching > directories in index. But it is no longer needed."
Yeah, I saw that, but it made little sense to me, especially since it seems to break a behavior that worked before.
Thanks!
Josh