This is rather puzzling. If the problem were remote, I would expect to see:
remote: fatal: unable to read <hash>
but the actual output is:
fatal: unable to read <hash>
which I believe means that it's your own Git—in this case, your builtin/pack-objects.c
file—that is complaining here:
buf = read_object_file(&entry->idx.oid, &type, &size);
if (!buf)
die("unable to read %s", oid_to_hex(&entry->idx.oid));
base_buf = read_object_file(&entry->delta->idx.oid, &type, &base_size);
if (!base_buf)
die("unable to read %s",
oid_to_hex(&entry->delta->idx.oid));
This could perhaps be coming from the fancy new "promise objects" code that allows partial clones to exist. See the partial clone documentation for details. Is your clone unusual in any way, e.g., shallow? (Does .git/shallow
exist?) What version of Git are you running? (Promise objects and narrow clones have partial support as of Git 2.17, using the "filter" options.)
The fact that you can push to a different server is not, itself, all that important, since the delta bases your Git will use when compressing a pack file to send on git push
depends on which commits their Git has. If the two servers have different sets of commits on them, your own Git may choose different delta-bases with which to build the thin pack to send to their Git.