Diagnosticare la corruzione
I repository si corrompono per perdita di alimentazione, guasti del disco, sync di rete parziale, o tool non-Git buggati che toccano .git.
git fsck --full
git fsck --full --strict --no-dangling
git fsck --connectivity-only
git fsck --lost-found
Fallimenti comuni e correzioni
Oggetto loose corrotto
# on healthy clone:
git cat-file -p <sha> > /tmp/recovered
# on corrupt clone:
cd .git/objects/<xx>
mv <rest-of-sha> <rest-of-sha>.bad
git hash-object -w /tmp/recovered
Pack file corrotto
for p in .git/objects/pack/pack-*.pack; do
git verify-pack -v "$p" >/dev/null 2>&1 || echo "BAD: $p"
done
rm .git/objects/pack/pack-<sha>.{pack,idx,bitmap,rev}
git fetch --all
git repack -ad
Index corrotto
rm .git/index
git reset
Ref corrotti
git pack-refs --all
cat .git/packed-refs
git update-ref refs/heads/main <sha>
Recupero da un clone
git clone https://example.com/repo.git fresh
cd corrupt
git push ../fresh 'refs/heads/local-only:refs/heads/local-only'
Prevenzione
- Eseguire
git fsckregolarmente. - Memorizzare backup bare.
- Evitare di modificare dentro
.git/a mano. - Usare RAM ECC e storage affidabile.
Errori comuni
Eseguire git gc su un repo corrotto — il prune puo eliminare le sole copie di oggetti recuperabili.
Protezione collisione SHA-1
git --version
echo "test" | git hash-object --stdin