Re: git clone with --dissociate sometimes fails to check out target commit
- From
- Rasmus Villemoes <ravi@prevas.dk>
- Date
- May 4, 2026, 11:36 UTC
- Message-ID
- <874ikns8xd.fsf@prevas.dk>
- In-Reply-To
- <20260504095110.GA599780@coredump.intra.peff.net>
On Mon, May 04 2026, Jeff King <peff@peff.net> wrote:
Show 14 quoted lines
> On Mon, May 04, 2026 at 10:20:32AM +0200, Rasmus Villemoes wrote: > >> Are we using --dissociate wrongly, or are we perhaps not maintaining >> those local mirror repos properly? They are essentially just created >> with 'git clone --mirror', with 'git remote update' run periodically. >> >> Naively, I'd expect the effects of --dissociate to only happen after >> everything else the clone command does has been done, but it seems that >> the ties to the reference repo are cut too soon. > > No, you're using it correctly. The dissociate step should copy all of > the shared objects into the new repo, so it shouldn't matter whether we > do it before or after checkout. The objects are there either way. >
[snip]
Show 9 quoted lines
> > It's kind of ugly, but I think may be the least-bad solution. See that > earlier thread for more discussion of alternatives. > > In the meantime, doing your dissociate clone with: > > git -c core.commitGraph=false clone ... > > should work around the problem.
Thanks for the extremely fast reply, analysis, patch and workaround!
I can confirm that the commit graph disabling workaround works on both the Debian and Arch machines.
I can also confirm that the patch applied on top of v2.54.0 works, although the build does throw this warning:
commit.c: In function ‘get_commit_tree_oid’:
commit.c:481:66: warning: passing argument 2 of ‘repo_get_commit_tree’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
481 | struct tree *tree = repo_get_commit_tree(the_repository, commit);
| ^~~~~~
commit.c:459:50: note: expected ‘struct commit *’ but argument is of type ‘const struct commit *’
459 | struct commit *commit)
| ~~~~~~~~~~~~~~~^~~~~~ Thanks again, Rasmus