Subject: Re: git gc complains about "unable to read $oid" but git fsck finds no problems

From: Junio C Hamano <[email-masked]>
Date: Thu, 01 Jun 2023 19:07:39 +0900

I vaguely recall there was a recent threaad discussing fsck and
normal codepath doing different checks.

Does this look similar to what you have?  (sorry, I am running out
of gas tonight to dig deeply myself).

https://lore.kernel.org/git/[email-masked]/

Andreas Schwab <[email-masked]> writes:

> $ git count-objects -v -H
> count: 2177
> size: 17.75 MiB
> in-pack: 878690
> packs: 46
> size-pack: 279.84 MiB
> prune-packable: 0
> garbage: 0
> size-garbage: 0 bytes
> $ git gc
> Enumerating objects: 866036, done.
> Counting objects: 100% (866036/866036), done.
> Delta compression using up to 8 threads
> Compressing objects: 100% (144924/144924), done.
> fatal: unable to read e8524e0483c8e65746888368f77f83d7a955ea87
> fatal: failed to run repack
>
> How can I find out where the bad object is referenced to be able to get
> rid of it?  It is not part of the regular history, a re-clone of the
> remote repository does not fetch it.  git fsck --full --cache prints a
> lot of dangling commits, but still does not complain.  The error happens
> about half way through writing out the new pack.
>
> The repository is more than 10 years old and in regular use all that
> time, including a lot of rebasing.  I have looked through all of the
> reflogs, but couldn't find the object there either.  git prune
> --expire=now and git reflog expire --all --stale-fix
> --expire-unreachable=all didn't help.
>
> Then I used the fresh clone to copy over all heads I know about, like
> recreating the branches and replace refs, fetching all reflog entries.
> That did not report any problems and git gc does not complain, but it
> has about 14800 objects less.
>
> Any ideas?