Hi,
I've stumbled upon a bug that the following command failed:
$ git clone <url> <dir>
--reference <old-dir> --dissociate
fatal:
unable to parse commit <SHA>
warning:
Clone succeeded, but checkout failed.
You can
inspect what was checked out with 'git status'
and retry
with 'git restore --source=HEAD :/'
Omitting --dissociate fixed the error, but it wasn't clear to me
what might be the root cause.
$ git
--version
git
version 2.54.0
With the help of AI I was able to create a
reproducer (see the attached script).
I have verified that the
reproducer works and also simplified it.
AI generated report (take it with a grain
of salt):
* The Bug: During dissociation, Git correctly repacks objects
and removes the objects/info/alternates file. However, the git
clone process has already initialized its object store including
the alternate's commit-graph.
After dissociation, it fails to "forget" or reload the object
store, leading to a crash when it tries to use the commit-graph
(which refers to the now-unlinked alternate) to perform the
initial checkout.
* Proof of state: As shown in the script output, a manual git
checkout immediately after the failure succeeds, proving the
repository is structurally sound but the clone process itself
was in an inconsistent state.
* Workaround: Passing -c core.commitGraph=false to the clone
command prevents the crash.
regards,
Daniel