git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: ZheNing Hu <adlternative@gmail.com>
To: Elijah Newren <newren@gmail.com>
Cc: Elijah Newren via GitGitGadget <gitgitgadget@gmail.com>,
	git@vger.kernel.org, Victoria Dye <vdye@github.com>,
	Derrick Stolee <derrickstolee@github.com>,
	Shaoxuan Yuan <shaoxuan.yuan02@gmail.com>,
	Matheus Tavares <matheus.bernardino@usp.br>,
	Glen Choo <chooglen@google.com>,
	Martin von Zweigbergk <martinvonz@google.com>
Subject: Re: [PATCH v4] sparse-checkout.txt: new document with sparse-checkout directions
Date: Sat, 14 Jan 2023 18:18:54 +0800	[thread overview]
Message-ID: <CAOLTT8SCtHD1KeLdRQ9cJNVm-uAae+=ii6L6r4DYDb4Lr4miSQ@mail.gmail.com> (raw)
In-Reply-To: <CABPp-BHaKH4sOPx2tx7CU+Uymvtu=mU1ZweGBDdWvhb-FgGA_Q@mail.gmail.com>

Elijah Newren <newren@gmail.com> 于2022年11月16日周三 13:49写道:

> [...]
> > > +    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?

  parent reply	other threads:[~2023-01-14 10:19 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-25  0:09 [PATCH] sparse-checkout.txt: new document with sparse-checkout directions Elijah Newren via GitGitGadget
2022-09-26 17:20 ` Junio C Hamano
2022-09-26 17:38 ` Junio C Hamano
2022-09-27  3:05   ` Elijah Newren
2022-09-27  4:30     ` Junio C Hamano
2022-09-26 20:08 ` Victoria Dye
2022-09-26 22:36   ` Junio C Hamano
2022-09-27  7:30     ` Elijah Newren
2022-09-27 16:07       ` Junio C Hamano
2022-09-28  6:13         ` Elijah Newren
2022-09-27  6:09   ` Elijah Newren
2022-09-27 16:42   ` Derrick Stolee
2022-09-28  5:42     ` Elijah Newren
2022-09-27 15:43 ` Junio C Hamano
2022-09-28  7:49   ` Elijah Newren
2022-09-27 16:36 ` Derrick Stolee
2022-09-28  5:38   ` Elijah Newren
2022-09-28 13:22     ` Derrick Stolee
2022-10-06  7:10       ` Elijah Newren
2022-10-06 18:27         ` Derrick Stolee
2022-10-07  2:56           ` Elijah Newren
2022-09-30  9:54     ` ZheNing Hu
2022-10-06  7:53       ` Elijah Newren
2022-10-15  2:17         ` ZheNing Hu
2022-10-15  4:37           ` Elijah Newren
2022-10-15 14:49             ` ZheNing Hu
2022-09-30  9:09   ` ZheNing Hu
2022-09-28  8:32 ` [PATCH v2] " Elijah Newren via GitGitGadget
2022-10-08 22:52   ` [PATCH v3] " Elijah Newren via GitGitGadget
2022-11-06  6:04     ` [PATCH v4] " Elijah Newren via GitGitGadget
2022-11-07 20:44       ` Derrick Stolee
2022-11-16  4:39         ` Elijah Newren
2022-11-15  4:03       ` ZheNing Hu
2022-11-16  3:18         ` ZheNing Hu
2022-11-16  6:51           ` Elijah Newren
2022-11-16  5:49         ` Elijah Newren
2022-11-16 10:04           ` ZheNing Hu
2022-11-16 10:10             ` ZheNing Hu
2022-11-16 14:33               ` ZheNing Hu
2022-11-19  2:36                 ` Elijah Newren
2022-11-19  2:15             ` Elijah Newren
2022-11-23  9:08               ` ZheNing Hu
2023-01-14 10:18           ` ZheNing Hu [this message]
2023-01-20  4:30             ` Elijah Newren
2023-01-23 15:05               ` ZheNing Hu
2023-01-24  3:17                 ` Elijah Newren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAOLTT8SCtHD1KeLdRQ9cJNVm-uAae+=ii6L6r4DYDb4Lr4miSQ@mail.gmail.com' \
    --to=adlternative@gmail.com \
    --cc=chooglen@google.com \
    --cc=derrickstolee@github.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=martinvonz@google.com \
    --cc=matheus.bernardino@usp.br \
    --cc=newren@gmail.com \
    --cc=shaoxuan.yuan02@gmail.com \
    --cc=vdye@github.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).