On 6/29/2019 3:55 AM, Jeff King wrote: > On Fri, Jun 28, 2019 at 09:22:56AM -0700, Junio C Hamano wrote: > >>> argv_array_push(&rev_list.args, "--quiet"); >>> + argv_array_push(&rev_list.args, "--alternate-refs"); >>> if (opt->progress) >>> argv_array_pushf(&rev_list.args, "--progress=%s", >>> _("Checking connectivity")); >> >> Quite honestly, I am very surprised that we did not do this. The >> idea of alternate object store, as well as reducing transfer cost by >> advertising their tips as '.have' phony refs, is almost as old as >> the pack protocol itself. > > Yeah, as you note we are already telling the other side of the push > "hey, we already have these objects". So we are almost always just > walking over our own local objects in the connectivity check, which is > silly. > > I only did "clone --reference" in the perf test because it was the > simplest, but a push to a server with alternates should be similarly > improved. E.g., doing this in a clone of linux.git: > > git init --bare dst.git > echo '../../.git/objects' >dst.git/objects/info/alternates > time git push dst.git HEAD > > goes from 40+ seconds to 100ms or so. Again, obviously that's the best > case, but it should also improve the normal case of somebody pulling > down "torvalds/linux.git" and pushing it back up to their own > "peff/linux.git", too. > > I don't have real-world numbers yet from GitHub, because we're not > actually advertising .haves on push right now. All of the Git pieces are > now in places to do so, but we still have to make some tweaks at our > replication layer. But soon. :) Exciting! Should improve the user's experience keeping their forks updated! -Stolee