Do not call prepare_packed_git for every refs. In fetch-pack, git list ups entries in .git/objects/pack directory for each refs. Such behavior makes git fetch-pack slow for the repository having the large number of refs, especially for windows. For chromium repository, having more than 300000 remote refs, git fetch takes more than 3 minutes if fetch-pack runs on my windows workstation. This patch improves the time to around 17 seconds in the same machine. Signed-off-by: Takuto Ikuta <tikuta@xxxxxxxxxx> --- fetch-pack.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fetch-pack.c b/fetch-pack.c index 008b25d3db087..0184584e80599 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -716,7 +716,7 @@ static int everything_local(struct fetch_pack_args *args, for (ref = *refs; ref; ref = ref->next) { struct object *o; - if (!has_object_file(&ref->old_oid)) + if (!has_object_file_with_flags(&ref->old_oid, OBJECT_INFO_QUICK)) continue; o = parse_object(&ref->old_oid); -- https://github.com/git/git/pull/437