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

Re: [PATCH v4] sparse-checkout.txt: new document with sparse-checkout directions

From
ZheNing Hu <adlternative@gmail.com>
Date
Jan 14, 2023, 10:18 UTC
Message-ID
<CAOLTT8SCtHD1KeLdRQ9cJNVm-uAae+=ii6L6r4DYDb4Lr4miSQ@mail.gmail.com>
In-Reply-To
<CABPp-BHaKH4sOPx2tx7CU+Uymvtu=mU1ZweGBDdWvhb-FgGA_Q@mail.gmail.com>
Elijah Newren <newren@gmail.com> 于2022年11月16日周三 13:49写道:
Show 25 quoted lines
> [...]
> > > +    The fact that files can move between the 'tracked' and 'untracked'
> > > +    categories means some commands will have to treat untracked files
> > > +    differently.  But if we have to treat untracked files differently,
> > > +    then additional commands may also need changes:
> > > +
> > > +      * status
> > > +      * clean
> > > +
> >
> > I'm a bit worried about git status, because it's used in many shells
> > (e.g. zsh) i
> > in the git prompt function. Its default behavior is restricted, otherwise users
> > may get blocked when they use zsh to cd to that directory. I don't know how
> > to reproduce this problem (since the scenario is built on checkout to a local
> > unborn branch).
>
> Could you elaborate?  I'm not sure if you are talking about an
> existing problem that you are worried about being exacerbated, or a
> hypothetical problem that could occur with changes.  Further, your
> wording is so vague about the problem, that I have no idea what its
> nature is or whether any changes to status would even possibly have
> any bearing on it.  But the suggested changes to git status are
> simply:
>

I find this special case, it will fetch some blobs when "git status". First, we init a git repository, then set sparse specification to "*.js" with no-cone mode, then use blob:none filter to fetch all commits and trees, and finally checkout to the default branch.

#!/bin/sh

rm -rf sparse-checkout-example git init sparse-checkout-example git -C sparse-checkout-example remote add origin git@github.com:derrickstolee/sparse-checkout-example.git git -C sparse-checkout-example sparse-checkout set --no-cone *.js git -C sparse-checkout-example fetch origin --filter=blob:none main git -C sparse-checkout-example branch --track main origin/main git -C sparse-checkout-example checkout main

Then let's do a git status, which some zsh git plugin will do when user "cd" the git repository.

# git -C sparse-checkout-exmaple status

remote: Enumerating objects: 1, done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 1 Receiving objects: 100% (1/1), 416 bytes | 416.00 KiB/s, done. remote: Enumerating objects: 1, done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 1 Receiving objects: 100% (1/1), 160 bytes | 160.00 KiB/s, done. remote: Enumerating objects: 1, done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 1 Receiving objects: 100% (1/1), 2.01 KiB | 2.01 MiB/s, done. remote: Enumerating objects: 1, done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 1 Receiving objects: 100% (1/1), 120 bytes | 120.00 KiB/s, done. On branch main Your branch is up to date with 'origin/main'.

You are in a sparse checkout with 8% of tracked files present.

It took 17.00 seconds to enumerate untracked files. 'status -uno' may speed it up, but you have to be careful not to forget to add new files yourself (see 'git help status'). nothing to commit, working tree clean

Yeah, here it fetches four blobs, and takes 17s!!!
So what blobs are we fetching?

GIT_TRACE_PACKET=1 git -C sparse-checkout-example status ... 18:02:32.989231 pkt-line.c:80 packet: fetch> want dff85a65c0ef4b50a4c01bdd4a247b974bc45f90 ... 18:02:37.059203 pkt-line.c:80 packet: fetch> want f07ead02d13f62414589b1f1b891bb6a764ec91f ... 18:02:40.868899 pkt-line.c:80 packet: fetch> want 3c4efe206bd0e7230ad0ae8396a3c883c8207906 ... 18:02:44.961809 pkt-line.c:80 packet: fetch> want 6590681af7e177dc71fe08648c4bbf4223b82866

Then let's we look what's the blob:
git log --find-object=dff85a65c0ef4b50a4c01bdd4a247b974bc45f90 --stat
commit 8ec229339caad56eb849c67361a9699004564177
Author: Derrick Stolee <dstolee@microsoft.com>
Date:   Mon Dec 30 13:30:27 2019 -0500
    Add twbs/bootstrap
 web/browser/.gitignore | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)
git log --find-object=f07ead02d13f62414589b1f1b891bb6a764ec91f --stat
commit 9c5a31030de62355410a322923e33e90a00032f6
Author: Derrick Stolee <dstolee@microsoft.com>
Date:   Mon Dec 30 13:31:06 2019 -0500
    Add artsy/artsy.github.io
 web/editor/.gitignore | 13 +++++++++++++
 1 file changed, 13 insertions(+)

Yeah, it seems that git status fetch these .gitigore files. So what's the wrong here?

Previous: ZheNing HuNext: Elijah Newren
Message 43 of 46 in “sparse-checkout.txt: new document with sparse-checkout directions”
  1. sparse-checkout.txt: new document with sparse-checkout directionsElijah Newren via GitGitGadget, Sep 25, 2022
  2. Junio C HamanoSep 26, 2022
  3. Junio C HamanoSep 26, 2022
  4. Elijah NewrenSep 27, 2022
  5. Junio C HamanoSep 27, 2022
  6. Victoria DyeSep 26, 2022
  7. Junio C HamanoSep 26, 2022
  8. Elijah NewrenSep 27, 2022
  9. Junio C HamanoSep 27, 2022
  10. Elijah NewrenSep 28, 2022
  11. Elijah NewrenSep 27, 2022
  12. Derrick StoleeSep 27, 2022
  13. Elijah NewrenSep 28, 2022
  14. Junio C HamanoSep 27, 2022
  15. Elijah NewrenSep 28, 2022
  16. Derrick StoleeSep 27, 2022
  17. Elijah NewrenSep 28, 2022
  18. Derrick StoleeSep 28, 2022
  19. Elijah NewrenOct 6, 2022
  20. Derrick StoleeOct 6, 2022
  21. Elijah NewrenOct 7, 2022
  22. ZheNing HuSep 30, 2022
  23. Elijah NewrenOct 6, 2022
  24. ZheNing HuOct 15, 2022
  25. Elijah NewrenOct 15, 2022
  26. ZheNing HuOct 15, 2022
  27. ZheNing HuSep 30, 2022
  28. sparse-checkout.txt: new document with sparse-checkout directionsElijah Newren via GitGitGadget, Sep 28, 2022
  29. sparse-checkout.txt: new document with sparse-checkout directionsElijah Newren via GitGitGadget, Oct 8, 2022
  30. sparse-checkout.txt: new document with sparse-checkout directionsElijah Newren via GitGitGadget, Nov 6, 2022
  31. Derrick StoleeNov 7, 2022
  32. Elijah NewrenNov 16, 2022
  33. ZheNing HuNov 15, 2022
  34. ZheNing HuNov 16, 2022
  35. Elijah NewrenNov 16, 2022
  36. Elijah NewrenNov 16, 2022
  37. ZheNing HuNov 16, 2022
  38. ZheNing HuNov 16, 2022
  39. ZheNing HuNov 16, 2022
  40. Elijah NewrenNov 19, 2022
  41. Elijah NewrenNov 19, 2022
  42. ZheNing HuNov 23, 2022
  43. ZheNing HuJan 14, 2023
  44. Elijah NewrenJan 20, 2023
  45. ZheNing HuJan 23, 2023
  46. Elijah NewrenJan 24, 2023

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.