2014-08-27 16 views
7

Questa è una delle numerose domande riguardanti un repo Git che è corrotto, con precisione un oggetto sciolto che è andato storto:Git danneggiato pronti contro termine: come scegliere un oggetto git da un repository pulito

$ git gc 
Counting objects: 3299, done. 
error: inflate: data stream error (unknown compression method) 
error: unable to unpack 831a5d31af4a0af2f5a367689bee27a44efc22c9 header 
Delta compression using up to 6 threads. 
Compressing objects: 100% (3283/3283), done. 
error: inflate: data stream error (unknown compression method) 
fatal: loose object 831a5d31af4a0af2f5a367689bee27a44efc22c9 (stored in .git/objects/83/1a5d31af4a0af2f5a367689bee27a44efc22c9) is corrupt 
error: failed to run repack 

seguito le risposte esistenti sull'argomento (How do I deal with corrupted git object files?, How to fix corrupted git repository? o What can I do with Git corruption due to a missing object?) Ho già rimosso l'oggetto 831a5d31 dal repository danneggiato.

Nel mio caso ho un clone del repository, che sembra contenere l'oggetto che mi manca, ma non c'è alcun file allo objects/83/1a5d31af4a0af2f5a367689bee27a44efc22c9. Come posso fare per riparare il mio repository?

risposta

10

Se il file esiste altrove

L'oggetto del repository pulito sia stato ripiegato, è per questo che non esiste più come un file.

di ripristinarlo, prima salvarlo come file, dal repository pulito, con

git show 831a5d31af4a0af2f5a367689bee27a44efc22c9 > 831a5-file 

Spostare 831a5-file nel repository danneggiato, ed eseguire

git hash-object -w 831a5-file 

Assicurarsi che la SHA1 dato nell'output è 831a5d31af4a0af2f5a367689bee27a44efc22c9

Questo memorizzerà l'oggetto e il repository è fisso!

Se il file non esiste altrove

Se il file non esiste altrove, cioè la corruzione si è verificato dopo il commit, ma prima sono stati in grado di spingere, c'è un modo per ripristinare il pronti contro termine e e reimpegnare le modifiche. Vedere this answer per una domanda correlata.

+0

Questo funziona per oggetti BLOB; c'è un modo per importare/esportare oggetti albero? – fuzzyTew

+1

Per rispondere alla mia stessa domanda, per fare questo per gli oggetti tree etc: 'git cat-file tree > temp' ' git hash-object -t albero -w temp' – fuzzyTew

+1

Grazie, hai salvato il mio repo! Si noti che se il repository pulito proviene da un sistema operativo diverso, SHA1 potrebbe non corrispondere se le terminazioni di riga non sono le stesse in tutti i sistemi operativi. La soluzione funzionava ancora, però. – mrm

Problemi correlati