SORU
29 NİSAN 2009, ÇARŞAMBA


Nasıl Gıt nesneleri sabit disk hatası zarar kurtarmak için?

Git deposu zarar gördü bazı dosyaları sonuçlanan sabit disk hatası vardı. git fsck --full çalıştırıldığında aşağıdaki çıktıyı alıyorum:

error: .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack SHA1 checksum mismatch
error: index CRC mismatch for object 6c8cae4994b5ec7891ccb1527d30634997a978ee from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack at offset 97824129
error: inflate: data stream error (invalid code lengths set)
error: cannot unpack 6c8cae4994b5ec7891ccb1527d30634997a978ee from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack at offset 97824129
error: inflate: data stream error (invalid stored block lengths)
error: failed to read object 0dcf6723cc69cc7f91d4a7432d0f1a1f05e77eaa at offset 276988017 from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack
fatal: object 0dcf6723cc69cc7f91d4a7432d0f1a1f05e77eaa is corrupted

Depoyu yedekleri var ama pack dosyası içeren tek yedek zaten zarar vermiştir. Farklı yedeklerden tek nesneleri almak ve bir şekilde Git sadece doğru nesneleri ile yeni bir paket üretmek için öğretmek için bir yol bulmak olduğunu düşünüyorum.

Benim depoyu düzeltmek için nasıl bir ipucu verebilir misiniz?

CEVAP
29 NİSAN 2009, ÇARŞAMBA


Biraz önceki yedekleri, kötü nesneleri farklı dosyalar paketlenmiş veya gevşek nesneler olabilir olabilir. Nesneleri geri alınabilir.

Veritabanınızda bir kaç kötü nesne yok gibi görünüyor. Manuel şekilde yapabilirsin.

Çünkü git hash-object, git mktree git commit-tree paketinde bulunur, bu yapmaya başlayın çünkü nesneleri yazmayın:

mv .git/objects/pack/* <somewhere>
for i in <somewhere>/*.pack; do
  git unpack-objects -r < $i
done
rm <somewhere>/*

(Paketin en deposundan taşındı, ve yine paketten; sadece iyi nesneleri şimdi veritabanında)

Yapabilirsiniz:

git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee

ve nesne türünü kontrol edin.

Eğer türüdür blob: al içeriğini dosyadan önceki yedekleri (git show git cat-file git unpack-file; sonra da neden olabilir. git hash-object -w yeniden nesnenin içinde geçerli bir havuz.

Eğer ağaç türü: git ls-tree geçerli deposunda önceki yedeklerden; git mktree tekrar yazmak için. ağacı kurtarmak için kullanabilirsiniz

Eğer bu tür bir taahhüt ise: git show, git cat-file git commit-tree ile aynı.

Tabii ki, bu süreç başlamadan önce özgün çalışma kopyası yedekleme istiyorum.

Ayrıca, How to Recover Corrupted Blob Object bir göz atın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Lamborghini

    Lamborghini

    13 Aralık 2005
  • ThePhestor

    ThePhestor

    22 Mart 2011
  • Willie D.

    Willie D.

    16 Aralık 2006