Re: git clone of empty repositories doesn't preserve hash
- From
Jeff King <peff@peff.net>
- Date
- Apr 5, 2023, 20:01 UTC
- Message-ID
- <20230405200153.GA525125@coredump.intra.peff.net>
- In-Reply-To
- <d04c430e-b609-b0a1-fd0f-0f3734d5c3b1@zombino.com>
On Wed, Apr 05, 2023 at 09:47:55PM +0200, Adam Majer wrote:
Show 10 quoted lines
> On 4/5/23 21:04, Junio C Hamano wrote: > > Does such a clone copy the name of the primary branch from the > > remote repository to the newly created repository? > > Yes it does. > > # git init -b maestro --object-format=sha256 a > # git clone a b > # cat b/.git/HEAD > ref: refs/heads/maestro
Yeah, we send a special capability line in that case. If you do:
GIT_TRACE_PACKET=1 git clone a b
you can see that upload-pack indicates that ls-refs understands the "unborn" capability:
packet: upload-pack> version 2 packet: upload-pack> agent=git/2.40.0.824.g7b678b1f643 packet: upload-pack> ls-refs=unborn packet: upload-pack> fetch=shallow wait-for-done packet: upload-pack> server-option packet: upload-pack> object-format=sha256 packet: upload-pack> object-info packet: upload-pack> 0000
And then clone asks for it say "yes, I also understand unborn":
packet: clone> command=ls-refs packet: clone> agent=git/2.40.0.824.g7b678b1f643 packet: clone> object-format=sha256 packet: clone> 0001 packet: clone> peel packet: clone> symrefs packet: clone> unborn packet: clone> ref-prefix HEAD packet: clone> ref-prefix refs/heads/ packet: clone> ref-prefix refs/tags/ packet: clone> 0000
And then upload-pack can send us the extra information:
packet: upload-pack> unborn HEAD symref-target:refs/heads/maestro packet: upload-pack> 0000
I think we'd need to do something similar here for object-format.
-Peff