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
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
Date
Sep 20, 2011, 10:09 UTC
Message-ID
<CACsJy8CDtswtPJVt-T911_1y0WqShonvcCbXhFtWu2zjEqLa4A@mail.gmail.com>
In-Reply-To
<4E77BC36.7060005@workspacewhiz.com>

On Tue, Sep 20, 2011 at 8:03 AM, Joshua Jensen <jjensen@workspacewhiz.com> wrote:

Show 13 quoted lines
> Sometime after Git 1.7.3.2, sparse checkouts stopped working for me.  My
> sparse-checkout file looks something like:
>
> *
> !DirA/
> !DirB/
> DirC/
>
> I have restored some lines of code that were removed in November 2010.  This
> resolves the sparse checkout issue for me, but my guess is the solution is
> not implemented properly.
>
> Can anyone confirm the issue

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.
> 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."

-- 
Duy
Previous: Joshua JensenNext: Joshua Jensen
Message 2 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.