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

Re: git checkout under 1.7.6 does not properly list untracked files and aborts

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Sep 21, 2011, 08:28 UTC
Message-ID
<4E79A04B.7080607@drmicha.warpmail.net>
In-Reply-To
<4E7996AA.4040909@drmicha.warpmail.net>
Michael J Gruber venit, vidit, dixit 21.09.2011 09:47:
Show 24 quoted lines
> Interesting. So, it is related to sparse, it seems, and there is also a
> mistake in the documentation (which contradicts itself, btw). With your
> script, since all files are requested to be checked out ('*'), none
> should have skip-worktree set, and the result should be the same as with
> my version. But I get this:
> 
> Initialized empty Git repository in /tmp/t/utest/.git/
> [master (root-commit) 5929c8b] a
>  1 files changed, 1 insertions(+), 0 deletions(-)
>  create mode 100644 a
> [master 60ad69e] b
>  1 files changed, 1 insertions(+), 0 deletions(-)
>  create mode 100644 b
> tracked
> Switched to branch 'side'
> cat: b: No such file or directory
> untracked
> untracked
> 
> That is probably the same output as for you. The final "git checkout
> master" errored out without doing anything and without message. I'll
> send a few cleanups now, and do some bisecting and thinking later;
> though there are people whose sparse-knowledge is way less sparse than
> mine ;)
So, I bisected it. The first bad commit is

9037026 (unpack-trees: fix sparse checkout's "unable to match directories", 2010-11-27)

although the real culprit may be its predecessor

2431afb (unpack-trees: move all skip-worktree checks back to unpack_trees(), 2010-11-27)

which does not compile:
    CC unpack-trees.o
unpack-trees.c: In function 'mark_new_skip_worktree':
unpack-trees.c:852:75: error: 'o' undeclared (first use in this function)
unpack-trees.c:852:75: note: each undeclared identifier is reported only
once for each function it appears in
make: *** [unpack-trees.o] Error 1

So, this problem was introduced after v1.7.3.2. Given the extent of those two commits, I can't help further (but your proposed fix may be fine).

Duy, sorry for prodding you again. My bisect script was (based on Joshua's, based on mine):

#!/bin/sh GIT_EXEC_DIR=~/src/git PATH=$GIT_EXEC_DIR:$PATH export GIT_EXEC_DIR d=/tmp/t/utest rm -Rf $d || exit 1 mkdir $d || exit 1 cd $d || exit 1 git init git config core.sparseCheckout true echo *>.git/info/sparse-checkout echo tracked>a git add a git commit -m a a git branch side echo tracked>b git add b git commit -m b git checkout side echo untracked>b git checkout master 2>&1 | grep "would be"

Hope this helps.
Michael
Previous: Nguyen Thai Ngoc DuyNext: Nguyen Thai Ngoc Duy
Message 19 of 23 in “git checkout under 1.7.6 does not properly list untracked files and aborts”
  1. Joshua JensenSep 9, 2011
  2. Joshua JensenSep 19, 2011
  3. Joshua JensenSep 19, 2011
  4. Michael J GruberSep 20, 2011
  5. Joshua JensenSep 20, 2011
  6. Michael J GruberSep 21, 2011
  7. 0/3 read-tree cleanupsMichael J Gruber, Sep 21, 2011
  8. Michael J GruberSep 21, 2011
  9. Junio C HamanoSep 21, 2011
  10. 1/3 unpack-trees: print "Aborting" to stderrMichael J Gruber, Sep 21, 2011
  11. Junio C HamanoSep 21, 2011
  12. Junio C HamanoSep 21, 2011
  13. Michael J GruberSep 22, 2011
  14. 2/3 git-read-tree.txt: language and typography fixesMichael J Gruber, Sep 21, 2011
  15. 3/3 git-read-tree.txt: correct sparse-checkout and skip-worktree descriptionMichael J Gruber, Sep 21, 2011
  16. Nguyen Thai Ngoc DuySep 21, 2011
  17. Michael J GruberSep 21, 2011
  18. Nguyen Thai Ngoc DuySep 21, 2011
  19. Michael J GruberSep 21, 2011
  20. Nguyen Thai Ngoc DuySep 21, 2011
  21. Michael J GruberSep 21, 2011
  22. Nguyen Thai Ngoc DuySep 21, 2011
  23. Nguyen Thai Ngoc DuySep 21, 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.