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

From: Andreas Schwab <[email-masked]>
Date: Thu, 01 Jun 2023 12:00:18 +0200

$ 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?

-- 
Andreas Schwab, SUSE Labs, [email-masked]
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."