Aufgrund eines I/O Fehlers ging ein Teil eines git repos kaputt (zum glück habe ich keine wichtigen Daten verloren). Ich konnte zwar noch commiten aber nicht mehr pushen. Wenn ich versuchte mein repo zu pushen warf mir git folgenden Fehler aus:
123
error: inflate: data stream error (incorrect data check)error: corrupt loose object '6e8b481aab34ab08aba71c4ba8d49d384b0fa61a'fatal: loose object 6e8b481aab34ab08aba71c4ba8d49d384b0fa61a (stored in .git/objects/6e/8b481aab34ab08aba71c4ba8d49d384b0fa61a) is corrupt
Ich versuchte das git repo mittels
1
$ git fsck --full
und anderen Befehlen zu repareien. Jedoch meldete mir git immer wieder den oben angeführten Fehler.
Das Problem lag daran, dass git immer versucht auf das kaputte File zuzugreifen und es nicht lesen konnte weil es kaputt war.
Nach einigem suchen im Internet bin ich auf ein Tutorial von Linus Torvalds gestoßen wo er beschriebt wie man kaputte repos wieder reparieren kann. Nur leider konnte dieses Tutorial nur Teilweise helfen. Aber der entscheidende Punkt war das Linus ganz zu beginn das kaputte Objekt einfach entfernt und nocheinmal fsck ausführt:
Viel weiter bin ich mit dem Tutorial von Linus leider nicht gekommen da die weiteren Schritte nicht möglich waren. An dieser Stelle hat mit das proGit Buch mit dem Kapitel ”Maintenance and Data Recovery” weiter geholfen. Hier wird empfolen sich einen branch anzulegen von einem noch funktionierendem Commit. Mit Hilfe von
1
$ git log -g
kann man sich alle commit und deren hash anzeigen lassen. Nun kann man einen branch erstellen der von einem funktionierenem commit ausgeht:
Danach habe ich ein add und ein commit gemacht bin mir aber nicht ganz sicher ob dies notwendig war. Jetzt nachdem ich ein weiteres mal fsck ausführte gab es keinen weiteren missing blob =)
Zum schluss muss noch ein merge vom master branch in den recover-branch durchgeführt werden:
1234567891011
$ git merge master
Merge made by recursive.
Auto packing the repository for optimum performance.
You may alsorun "git gc" manually.
See "git help gc"for more information.
Counting objects: 17619, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (16973/16973), done.
Writing objects: 100% (17619/17619), done.
Total 17619(delta 6323), reused 0(delta 0)Removing duplicate objects: 100% (256/256), done.