2010-05-25 14 views
20

Gibt es eine Möglichkeit, mein Repository mit Commit-Protokoll in Takt zu reparieren.Git-Protokoll: fatal Objekt [sha1] ist beschädigt

# git log 
fatal: object 01aeb2bf2e93b238f0e0422816b3e55518321ae7 is corrupted 

Aus dem Lesen des Links unten sieht es aus wie ich habe es zappen und neu beginnen.

http://www.miek.nl/s/7e76eadefe/

+1

Ich sollte hinzufügen, dass die Ursache dafür die Beschädigung der Festplatte auf meiner virtuellen Maschine war, die nicht ordnungsgemäß heruntergefahren wurde. – Keyo

Antwort

11

Haben Sie Klone dieses Repository an anderer Stelle haben? Vielleicht möchten Sie this post von Linus Torvalds lesen, um dieses beschädigte Objekt wiederherzustellen, vorausgesetzt, das beschädigte Objekt ist ein Blob (Dateiinhalt).

+0

Keine Klone. Ich habe das erst gestern eingerichtet. Ich hatte also nur 10 Commits. Ich endete frisch gestartet. Aber wird es am Ende jeden Tages irgendwo anders hinschieben. Lektion gelernt. Immer noch froh, aus Svn sein. Git ist schnell! – Keyo

+5

hilfreich wäre, um den Kern der Post in Ihrer Antwort enthalten, nur für den Fall, sagen wir, wird kernal.org jemals gehackt und ist offline :( – SpoonMeiser

8

Ich ging in der gleichen Situation, wahrscheinlich aufgrund eines unkorrekten Herunterfahrens der virtuellen Maschine, in der ich arbeitete. Es gab ungefähr 10 Objekte in .git/objects, die Null Länge hatten. Soweit ich das beurteilen kann, waren die eigentlichen Quellcodedateien in Ordnung, nur das Repository wurde abgespritzt.

$ git status 
fatal: object fbcf234634ee04f8406cfd250ce5ab8012f92b08 is corrupted 

Per einige Vorschläge, die ich an anderer Stelle sah (einschließlich Linus Post verwiesen oben), habe ich versucht, vorübergehend die beschädigten Objekte git bewegend über beschwerte von .git/Objekte an anderer Stelle. Wenn alle von ihnen bewegt hatte, bekam ich:

$ git status 
fatal: bad object HEAD 

Nach etwa einer Stunde googeln und verschiedene Lösungen versucht, gab ich auf und begann vom Ursprung eine neue Arbeitskopie mit ‚git clone‘ (zu ziehen, die war etwa 2 Stunden hinter meiner Arbeitskopie). Ich benutzte dann rsync -rC (-C schließt SCM-Dateien aus), um die geänderten Dateien von der vermasselten Arbeitskopie in meine neue Arbeitskopie zu kopieren.

+0

Dank! Scheint für mich zu arbeiten. Katastrophe abgewendet. – DevX

+0

Die gleiche Sache hier VM Korruption. rsync funktionierte perfekt - nichts verloren, nur das Protokoll, das neu war leicht zu Dank –

1

Sie könnten auch versuchen, diese Objekte wiederherzustellen, indem Sie sie einfach aus anderen Repositories kopieren.

Meine virtuelle Maschine ist während der Aufzeichnung eines Push-Commits abgestürzt, sodass die Objekte auf einem lokalen Computer sicher gespeichert wurden. Ich scp'ed sie auf virtuelle Maschine und Voila - Git fsck gibt keine Fehler aus.

1

Löschen Sie einfach das korrupte Objekt, über das sich git beschweren. Ich war in der Lage, das gleiche Problem gerade jetzt auf diese Weise zu lösen.

fatal: object 985a4870e7d890b314d2794377045a8b007c7925 is corrupted 

Für den oben genannten Fehler konnte ich bei entsprechendem Objekt finden:

project_directory/.git/objects/98/5a4870e7d890b314d2794377045a8b007c7925 

Wo Sie die Datei 0 Bytes ist zu sehen und löscht es den Abruf erlaubt zu arbeiten.

Vermutlich wurde der vorherige Abruf unterbrochen, wobei das beschädigte Objekt mit der Größe = 0 Byte zurückgelassen wurde.

+0

bizarr, dass dies tatsächlich funktioniert, ein bisschen wie die TV-treten der statischen aufklären –

+1

nicht für mich arbeiten, und es klingt wie ein schlechter.! Idee in Anbetracht von Torvalds 'mehrseitiger Anleitung, wie man das korrupte Objekt repariert (siehe oben in der Antwort). –

+0

Hat bei mir auch nicht funktioniert. Mein Objekt ist nirgendwo zu finden –

1

haben das gleiche Problem, je nachdem, was git Befehl, den ich lief, es endete mit der Nachricht auf:

fatal: object <hash> is corrupted 

ich kein Backup und wollte nicht meine Commits verlieren, so beschlossen habe ich versuchen Jase-Lösung und entfernt, um die Länge 0 Datei ich hatte: .git/objects/00/<hash> bekam dann das gleiche:

$ git status 
fatal: bad object HEAD 

Dann habe ich versucht, zu wissen, was falsch war und sah in .git/refs/heads/master, wo ich den Hash hatte.

Ich sah in .git/logs/refs/head/master und gefunden Zeilen wie diese:

<old commit> <new commit> <author> <timestamp> commit: <commit message> 

I die letzte Zeile entfernt (was hatte =) und diese Linie in .git/refs/heads/master eingefügt, dessen Inhalt gelöscht

I wurde dann in der Lage, erfolgreich zu begehen.

1

Ich hatte das gleiche Problem. Ich bemerkte, dass ich nicht als root eingeloggt war. Als ich mich als root angemeldet habe, konnte ich das Protokoll ohne das Fehlerzeichen überprüfen.

diesen guten Zustand erstarren, ich dies tat:

aus Wurzel
git add . 
git commit -a -m "stabilize git" 

ich verlassen und versucht, von einem Client zu ziehen. Es hat später für mich geklappt.

Als ich das hinzufügen und committen, wusste ich, dass es mir gut ging mit dem, was in dem Verzeichnis war. Ich hatte keine Änderungen sichtbar durch "Git Status".

Verwandte Themen