2011-10-04 14 views
6

Ho un oggetto git che è corrotto. La dimensione del file è 0 nella directory oggetti git.Come recuperare da un file danneggiato corrotto in git

Prima un fsck:

git fsck --full 
fatal: loose object a35c1489005cca1ffeb3c2d3e4d63988408b6a24 (stored in .git/objects/a3/5c1489005cca1ffeb3c2d3e4d63988408b6a24) is corrupted 

Poi un ls:

ls -l .git/objects/a3/5c1489005cca1ffeb3c2d3e4d63988408b6a24 
----------+ 1 sampath ???????? 0 Sep 13 15:26 .git/objects/a3/5c1489005cca1ffeb3c2d3e4d63988408b6a24 

Questo file non esiste sul disco !?

# git cat-file -t a35c1489005cca1ffeb3c2d3e4d63988408b6a24 
error: unable to find a35c1489005cca1ffeb3c2d3e4d63988408b6a24 
fatal: git cat-file a35c1489005cca1ffeb3c2d3e4d63988408b6a24: bad file 

Ho visto questo errore prima quando ho provato a fare un tiro.
Ho provato a rimuovere il file e a fare un pull, ma non ha funzionato. Si è lamentato che il file è mancante.

Quando ho rimosso il file e corsi fsck, mi ha mostrato un sacco di oggetti pendenti

# git fsck --full 
broken link from commit 1e5980c224ff19b19ad99dbefed4c7c64c58aee6 
       to tree a35c1489005cca1ffeb3c2d3e4d63988408b6a24 
dangling tree 0401d636a512b208dffd6ac6e153ab0a061f8d5d 
dangling blob 58014c0266784a1e3cc1502de82837c5f36c8514 
dangling tree 0507fa56260c693cea678eab0343240c5bba06ad 
dangling tree 130770880c664a0b0cf5a21d037cbdba7480dc90 

mi stanco di tornare un paio di commit e non ha aiutato.
Eventuali indicazioni su come recuperare da questo?

+1

Avete una copia del repository da qualche parte? Se lo fai, prendi l'oggetto da lì. Dal momento che stavi tirando da qualche parte, si spera che tu abbia quell'oggetto in quel repository – Andy

+0

Sarebbe http://stackoverflow.com/questions/801577/how-to-recover-git-objects-damaged-by-hard-disk-failure help ? (se si dispone di backup di tale repo, ovviamente) – VonC

+0

ho provato questo. Ho clonato il repository e spacchettato gli oggetti. Ma non sono riuscito a trovare il file oggetto libero con dimensione 0. Significa che appartiene a uno dei miei commit locali che non sono stati ancora trasmessi al telecomando? –

risposta

1

Sembra che un albero sia danneggiato. Se conosci la tua struttura attorno a questi commit, puoi indovinare di cosa si tratta. Si spera che tu possa dedurre quali file sono stati aggiunti o rimossi. Anche i tuoi blob e altri alberi penzoleranno. Se vuoi davvero riprendervi da questo e non avere altri cloni del repository, è ancora possibile ma richiederà un po 'di tempo, impegno e fortuna.

Spero che questo aiuti.

Problemi correlati