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

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
Previous: Nguyen Thai Ngoc DuyNext: Michael J Gruber
Message 3 of 4 in “Git 1.7.6: Sparse checkouts do not work with directory exclusions”
  1. Joshua JensenSep 19, 2011
  2. Nguyen Thai Ngoc DuySep 20, 2011
  3. Joshua JensenSep 20, 2011
  4. Michael J GruberSep 20, 2011

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.