Ich habe versucht, mein Repository, das ich in meinem Ubuntu-Ordner habe, auf einen neuen Computer zu klonen, und habe Folgendes erhalten:
christopher@christopher-laptop:~/source/personal$ git clone ~/Ubuntu\ One\ Side\ Work/projects.git/
Cloning into 'projects'...
done.
fatal: unable to read tree 29a422c19251aeaeb907175e9b3219a9bed6c616
christopher@christopher-laptop:~/source/personal$
Also habe ich versucht, mir die vielen anderen Fragen wie diese anzusehen, die hier gestellt wurden, und die meisten sagen, sie sollen rennen, git fsck --full
und dann bekomme ich das, wenn ich das versuche.
christopher@christopher-laptop:~/Ubuntu One Side Work/projects.git$ git fsck --full
Checking object directories: 100% (256/256), done.
Checking objects: 100% (447/447), done.
broken link from commit 235ae1f48701d577d71ebd430344a159e5ba4881
to commit 984c11abfc9c2839b386f29c574d9e03383fa589
broken link from tree 632a9cf0ef9fccea08438b574e2f1c954f4ff08b
to blob 25a742dff0a403b2b3884f2ffddf63eb45721fac
broken link from tree 632a9cf0ef9fccea08438b574e2f1c954f4ff08b
to blob dd4e97e22e159a585b20e21028f964827d5afa4e
broken link from tree 632a9cf0ef9fccea08438b574e2f1c954f4ff08b
to tree 29a422c19251aeaeb907175e9b3219a9bed6c616
broken link from tree 632a9cf0ef9fccea08438b574e2f1c954f4ff08b
to tree 8084e8e04d510cc28321f30a9646477cc50c235c
broken link from tree 774b5b4157b4caae1c6cad96c8eaf5d4eba2c628
to blob a0daa0c1567b55d8de2b4d7a3bc010f58c047eab
broken link from tree 774b5b4157b4caae1c6cad96c8eaf5d4eba2c628
to blob e9052d35bfb6d30065b206fc43f4200a04d5281b
broken link from tree 774b5b4157b4caae1c6cad96c8eaf5d4eba2c628
to blob 1a3a5e4dd2502ac121c22f743c4250e254a94eeb
broken link from tree 4aa336dc1a5838e8918e03b85580069d83f4ad09
to tree 8cc55ec952dc192a233e062201d1e7e873ac3db0
broken link from tree e5674a91a53e15575a1f3bf5786bc5cc719fb483
to blob 4a994e1e7bb7ce28dcec98bad48b9a891d7dec51
broken link from tree e5674a91a53e15575a1f3bf5786bc5cc719fb483
to blob ac033bf9dc846101320c96a5ce8aceb8c96ec098
broken link from tree 252ab84542264e1589576b6ee51e7a31e580a0e2
to tree 2069041cd5950e529e2991d37b7290ec021d90d4
broken link from tree 2d4964aa4d4f5d8c7228518ce72ef6a63f820c6d
to blob d83690e1b9a6bdd8a08754b38231799acefcb2ab
broken link from tree c7192e82fc581bd6448bda1a25e8729bdac5f4ff
to blob 30d54d47ae82add1917ca173d42e58b396df580b
broken link from tree 7c66306901fc71389623286936cef172d4ffe408
to blob bc7e05d705401273b1df4e939de0f540597c0931
broken link from tree 0940f5fd227d4c84d6e6749d872db50a4522ae3a
to tree 923767594ac22023e824948d65622fe5b407d1a1
broken link from tree 8eadcd2a971e8357d24f0d80f993d2963452209f
to blob 2598bde3dc8cb80ee49510b8159344004b88645f
broken link from tree ffa302dd0d969172ef23caeefe856ab2f57a4e4d
to blob d6925fa431be1ac585bf9a481e98f75107a6e6fb
broken link from tree 7045b8870a49ce30a2027537a96d73d162bda773
to blob 25688652dea26f61f576ca1b52b9d1a18fbfd01d
broken link from tree 37e4705d34bd440ce681ae32ae9a180a13256d72
to tree 246f564d4cee53339b8a4244f3173b61caa518eb
missing blob d6925fa431be1ac585bf9a481e98f75107a6e6fb
missing blob ac033bf9dc846101320c96a5ce8aceb8c96ec098
missing tree 29a422c19251aeaeb907175e9b3219a9bed6c616
missing tree 8084e8e04d510cc28321f30a9646477cc50c235c
missing blob 30d54d47ae82add1917ca173d42e58b396df580b
missing tree 8cc55ec952dc192a233e062201d1e7e873ac3db0
missing blob e9052d35bfb6d30065b206fc43f4200a04d5281b
dangling tree 4b26e95db542c72ac4a22ec25abe38fb2de79752
missing blob d83690e1b9a6bdd8a08754b38231799acefcb2ab
missing blob 25a742dff0a403b2b3884f2ffddf63eb45721fac
missing tree 923767594ac22023e824948d65622fe5b407d1a1
missing blob 25688652dea26f61f576ca1b52b9d1a18fbfd01d
missing blob 2598bde3dc8cb80ee49510b8159344004b88645f
dangling tree 3a683869f1bb0c1634de75700c316b3b36570dbd
dangling blob 4098d30843380d798a811f1aa9a02994f0dbbb27
missing tree 2069041cd5950e529e2991d37b7290ec021d90d4
missing blob 4a994e1e7bb7ce28dcec98bad48b9a891d7dec51
missing blob 1a3a5e4dd2502ac121c22f743c4250e254a94eeb
missing blob a0daa0c1567b55d8de2b4d7a3bc010f58c047eab
dangling tree 6c7b5162aa7a303fa3fe8dc393c5da564e309521
missing commit 984c11abfc9c2839b386f29c574d9e03383fa589
missing blob bc7e05d705401273b1df4e939de0f540597c0931
missing blob dd4e97e22e159a585b20e21028f964827d5afa4e
missing tree 246f564d4cee53339b8a4244f3173b61caa518eb
dangling commit a01f5c1e5315dc837203d6dee00d3493be9c5db9
Das sieht echt schlecht aus. Wenn ich ein mache, git log | head
bekomme ich das
christopher@christopher-laptop:~/Ubuntu One Side Work/projects.git$ git log | head
error: Could not read 984c11abfc9c2839b386f29c574d9e03383fa589
fatal: Failed to traverse parents of commit 235ae1f48701d577d71ebd430344a159e5ba4881
commit 2fb0d2d0643b445440f01b164f11ee9ee71fca48
Author: christopher <[email protected]>
Date: Wed Aug 7 15:51:42 2013 -0400
finishing chapter 7
Andere Fragen hier haben gesagt, um zu schauen ./git/refs/heads/master
. Es ist ein nacktes Repo und refs/heads/
existiert, existiert aber refs/heads/master
nicht. KOPF im nackten Repo sagt es ref: refs/heads/master
allerdings
packed-refs
sagt das aber
# pack-refs with: peeled
2fb0d2d0643b445440f01b164f11ee9ee71fca48 refs/heads/master
Wieder andere Fragen haben vorgeschlagen, ausgeführt zu werden, git reflog
und es wird keine Ausgabe angezeigt, wenn ich das ausführe.
Ich habe also wirklich keine Ahnung, was ich hier tun soll. Welche Strategie sollte verfolgt werden? Ist es möglich, den Kopf auf dieses letzte Commit am 7. August zurückzusetzen?
BEARBEITEN:
Wenn Sie ein Git-Protokoll erstellen und zum Ende der Bildschirmausgabe gehen, wird Folgendes angezeigt:
commit 996e03b949aea176238e3c7a8452700bbb987ac9
Author: christopher <christopher@christopher>
Date: Wed Jul 3 23:00:44 2013 -0400
many many changes
error: Could not read 984c11abfc9c2839b386f29c574d9e03383fa589
fatal: Failed to traverse parents of commit 235ae1f48701d577d71ebd430344a159e5ba4881
Das scheint zu verhindern, dass die Git-Pflaume funktioniert
git-repair
ist ein Programm, das ausgeführt wirdgit fsck
und sich sehr bemüht, alle auftretenden Probleme zu beheben. git-repair.branchable.com Es scheint ziemlich fähig zu sein, und obwohl Sie möglicherweise Objekte aus einem Backup kopieren müssen (wenn Sie können!) (Sie haben ein Backup, oder?), sollte es Ihnen viel Zeit sparen Rette alles, was es kann und überlasse dir die eigentliche Arbeit, nicht viele automatisierbare Aufgaben. Keine Zugehörigkeit usw.Antworten:
Als Alternative zur letzten Option von CodeGnome können Sie, wenn nur das lokale Repo beschädigt ist und Sie die URL zur Fernbedienung kennen, diese so einstellen
.git
, dass sie${url}
mit der Fernbedienung übereinstimmt (durch die Remote-URL ersetzen ):Dies lässt Ihren Arbeitsbaum intakt und wirkt sich nur auf die Buchhaltung von git aus.
Zu diesem Zweck habe ich kürzlich auch ein Bash-Skript erstellt (Anhang A), das ein wenig Sicherheit für diesen Vorgang bietet.
Hinweis:
Wenn Ihr Repo Submodule hat, wird dieser Prozess sie irgendwie durcheinander bringen, und die einzige Lösung, die ich bisher gefunden habe, besteht darin, sie zu löschen und dann zu verwenden
git submodule update --init
(oder das Repo erneut zu klonen, aber das scheint zu drastisch).Anhang A - Vollständiges Skript
quelle
.git
Ordner wiederherstellen . Ich fandgit reset origin/master --hard
es nützlicher als--mixed
.TL; DR
Git speichert die Geschichte nicht so, wie Sie denken. Es berechnet den Verlauf zur Laufzeit basierend auf einer Ahnenkette. Wenn in Ihrer Abstammung Blobs, Bäume oder Commits fehlen, können Sie Ihren Verlauf möglicherweise nicht vollständig wiederherstellen.
Stellen Sie fehlende Objekte aus Backups wieder her
Das erste, was Sie versuchen können, ist, die fehlenden Elemente aus der Sicherung wiederherzustellen. Überprüfen Sie beispielsweise, ob eine Sicherung des Commits als gespeichert ist
.git/objects/98/4c11abfc9c2839b386f29c574d9e03383fa589
. Wenn ja, können Sie es wiederherstellen.Möglicherweise möchten Sie auch die Objekte git-verify-pack und git-unpack untersuchen, falls das Commit bereits gepackt wurde und Sie es für die Zwecke der Repository-Operation an ein loses Objekt zurückgeben möchten.
Chirurgische resektion
Wenn Sie die fehlenden Elemente aus einer Sicherung nicht ersetzen können, können Sie möglicherweise den fehlenden Verlauf entfernen. Beispielsweise können Sie Ihren Verlauf oder Ihr Reflog untersuchen, um einen Vorfahren von Commit 984c11abfc9c2839b386f29c574d9e03383fa589 zu finden. Wenn Sie eine intakte finden, dann:
Wenn es funktioniert, verlieren Sie natürlich die dazwischenliegende Geschichte. Wenn Sie zu diesem Zeitpunkt über ein Arbeitsverlaufsprotokoll verfügen, empfiehlt es sich, den Verlauf und die Reflogs aller nicht erreichbaren Commits und Objekte zu bereinigen.
Vollständige Wiederherstellung und Neuinitialisierung
Wenn Ihr Repository immer noch kaputt ist, haben Sie hoffentlich eine unbeschädigte Sicherung oder einen nicht beschädigten Klon, von dem Sie wiederherstellen können. Wenn nicht, aber Ihr aktuelles Arbeitsverzeichnis gültige Dateien enthält, können Sie Git jederzeit neu initialisieren. Beispielsweise:
Es ist drastisch, aber es kann Ihre einzige Option sein, wenn Ihr Repository-Verlauf wirklich nicht wiederherstellbar ist. YMMV.
quelle
error: Could not read abcde
Mein Repo wird von GitLab verwaltet und es wurden Dateien erstellt, die mein Benutzer nicht lesen konnte. Einsudo chown
später und ich war gut zu gehen.Hier ist ein Skript (Bash), um die erste Lösung von @CodeGnome zu automatisieren, die aus einer Sicherung wiederhergestellt werden soll (auf der obersten Ebene des beschädigten Repos ausführen). Die Sicherung muss nicht vollständig sein, sondern nur die fehlenden Objekte enthalten.
quelle
Wenn Sie eine Fernbedienung konfiguriert haben und es Ihnen egal ist, nicht gepushten Code zu verlieren, können Sie Folgendes tun:
quelle
fatal: pack has 13 unresolved deltas
.Bevor Sie die auf dieser Seite beschriebenen Korrekturen ausprobieren, sollten Sie eine Kopie Ihres Repos erstellen und nur an dieser Kopie arbeiten. Wenn Sie das Problem am Ende beheben können, vergleichen Sie es mit dem Original, um sicherzustellen, dass Sie während des Reparaturvorgangs keine Datei verloren haben.
Eine andere Alternative, die für mich funktioniert hat, war das Zurücksetzen des Git-Kopfes und des Index auf den vorherigen Zustand mit:
git reset --keep
Sie können dies auch manuell tun, indem Sie die Git-GUI öffnen, die einzelnen "Staged Changes" auswählen und auf "Unstage the change" klicken. Wenn alles nicht bereitgestellt ist, sollten Sie jetzt in der Lage sein, Ihre Datenbank zu komprimieren, Ihre Datenbank zu überprüfen und ein Commit durchzuführen.
Ich habe auch die folgenden Befehle ausprobiert, aber sie haben bei mir nicht funktioniert, aber möglicherweise bei Ihnen, je nachdem, welches Problem Sie genau haben:
Um dieses Problem der Synchronisierung zu vermeiden, das Ihren Git-Index beschädigt (was bei DropBox, SpiderOak oder einer anderen Cloud-Festplatte der Fall sein kann), können Sie Folgendes tun:
.git
Ordner in eine einzige „Bündel“ git - Datei unter Verwendung von :git bundle create my_repo.git --all
, dann sollte es nach wie vor nur die gleiche Arbeit, aber da alles in einer einzigen Datei ist , werden Sie sich nicht riskieren , die Synchronisation mehr Ihre git Repo zu beschädigen.quelle
Wenn Sie verzweifelt sind, können Sie dies versuchen:
Es wird Ihre Daten erhalten, aber Sie werden den Verlauf verlieren. Ich ging mit Versuch und Irrtum auf mein Repo und
--depth=10
arbeitete,--depth=50
gab mir aber Fehler.quelle
Ich habe versucht, die Objektdateien mit 0 Bytes zu entfernen und sie erneut von der Fernbedienung abzurufen, und es hat funktioniert:
Es holte die fehlenden Objekte von der Fernbedienung und ermöglichte mir, weiter zu arbeiten, ohne das gesamte Repo neu zu initialisieren.
quelle
Ich hatte das gleiche Problem, daher habe ich den Ordner ".git" durch eine gesicherte Version ersetzt und es funktionierte immer noch nicht, da die .gitconfig-Datei beschädigt war. Das BSOD auf meinem Laptop hat es beschädigt. Ich habe es durch den folgenden Code ersetzt und Sourcetree hat alle meine Repositorys wiederhergestellt.
Ich weiß nicht, ob dies jemandem helfen wird, aber dies ist nur eine andere Lösung, die für mich funktioniert hat.
quelle
Entfernen Sie den Index und setzen Sie ihn zurück
quelle
Ich habe in letzter Zeit ähnliche Probleme mit der Git-Version 2.7.1 unter Ubuntu 18.04.3 festgestellt. So habe ich es gemacht:
Die meiste Zeit war der Wiederherstellungsprozess erfolgreich
quelle
In meinem Fall habe ich das Repository aus dem Quellcode erstellt, der sich bereits in meinem PC befindet, und dieser Fehler ist aufgetreten. Ich habe den .git Ordner gelöscht und alles wieder gemacht und es hat funktioniert :)
quelle
Ich wollte dies als Kommentar unter Zoey Hewils großartiger Antwort hinzufügen oben , aber ich habe derzeit nicht genug Repräsentanten, um dies zu tun, also muss ich es hier hinzufügen und ihre Arbeit : P.
Wenn Sie Poshgit verwenden und sich außergewöhnlich faul fühlen , können Sie Folgendes verwenden, um Ihre URL automatisch aus Ihrer Git-Konfiguration zu extrahieren und die Arbeit noch einfacher zu machen. Standard-Vorsichtsmaßnahmen gelten für das Testen auf einer Kopie / das Sichern Ihres lokalen Repos zuerst, falls es in Ihrem Gesicht explodiert.
quelle
Schneller Weg, wenn Sie Änderungen an Ihrem aktuellen Projekt vorgenommen haben und diese nicht verlieren möchten, verschieben Sie Ihr aktuelles Projekt an einen anderen Ort, klonen Sie das Projekt von github in diesen Ordner und nehmen Sie einige Änderungen vor, um erneut zu bestätigen. Oder löschen Sie einfach das Repo und klonen Sie es erneut, es hat bei mir funktioniert.
quelle
Dieser Befehl hat bei mir funktioniert:
quelle