2016-04-17 14 views
0

War zu spät letzte Nacht arbeiten an einigen Legacy-Code ich geerbt von jemand anderem. Ich wollte die Codebasis nicht nur in Tabs, sondern auch in Leerzeichen konvertieren. Ich habe alle Registerkarten durch zwei Leerzeichen in meinem Arbeitsverzeichnis ersetzt. Rekursiv. Einschließen des .git-Verzeichnisses Ich hatte einige Änderungen vorgenommen und sie übernommen, aber ich hatte das Repo noch nirgendwo anders hingebracht.Ersetzt/ t/mit// auf Git Repo

Es ist kein großer Verlust, wenn ich das Repo nur noch einmal starten und die Änderungen so weit in ein Commit zerquetschen muss, aber angenommen, dass ich die Mühe machen sollte, wie wiederherstellbar ist diese Situation?

In gewisser Weise bin ich froh, dass ich diesen Fehler gemacht habe, bevor ich zu weit gegangen bin, aber angenommen, es war die einzige Kopie eines jahrelangen Projekts, wie schlimm wäre es?

+0

Die Haupt Verschlagenheit ist, dass es jetzt keine einfache Möglichkeit, zu sagen, was eigentlich aus zwei Räumen waren und was war ursprünglich eine Registerkarte. Sie sind wahrscheinlich gerade dabei, das Repository neu zu erstellen. (Hoffentlich könnte es im Falle eines jahrelangen Projekts irgendwo eine andere Fernbedienung geben, von der aus man neu klonen könnte.) – Amber

Antwort

1

Rekursiv. Einschließlich des .git-Verzeichnisses Zuerst müssen Sie überprüfen, dass Ihr Ordner .git nicht "kaputt" ist.

# Verify that the .git folder and all the objects are still usable 
git fsck --full 

Wenn Sie nicht sehen, und Daten baumelnden sind Sie auf OK.

hatte aber nicht den Repo anderswo schob noch

Sie noch einmal alle vorherigen Daten wiederherstellen können, wenn Sie gedrückt (es sei denn, Sie haben eine Zwangs Push)


In gewisser Weise bin ich froh, dass ich diesen Fehler gemacht habe, bevor ich zu weit gegangen bin, aber angenommen, es war die einzige Kopie eines jahrelangen Projekts, wie schlimm wären Sie?

Wenn Sie kein Backup haben, werden Sie in großen Schwierigkeiten sein. es ist eine wiederherstellbare Situation, aber es wird viel Arbeit erfordern.


Wie kann ich diesen Fehler beheben?

Wenn Sie alle Registerkarten in Leerzeichen oder umgekehrt ersetzt haben, müssen Sie versuchen, sie wieder zu ersetzen, die gute Sache ist, dass Git hat die SHA-1, die sha1sum des Inhalts ist (der Inhalt selbst ist gezippt und das Format innerhalb sollten keine Leerzeichen enthalten

kurz (es ist ein wenig komplizierter als diese) git die SHA-1 des folgenden Inhalt berechnen und komprimieren.

blob<space><content_lengt><null><content> 

Dann git komprimieren die Wenn Sie wissen, wie Dateien gespeichert sind, können Sie versuchen, sie wiederherzustellen, aber es ist eine Menge Arbeit Hand sollte nicht Leerzeichen im Inhalt sein, so dass die Chancen, dass Sie etwas in sich verwirrt hätten (.git/object) ist klein.

Summary

Spielt keine Rolle, was Sie nie Touch der .git Ordner tun !!!


enter image description here

+0

Es wäre also wahrscheinlich ein Prozess, bei dem man verschiedene Kombinationen von sich verändernden/nach/\ t /, check dann das sha1 und gehe zur nächsten Datei, wenn es korrekt ist? Das hört sich furchtbar an, aber ich bin froh, dass es einen Weg gibt, wenn es jemals zu einer solchen Situation kommen sollte. : D – Monban

+0

Ja, so etwas, deshalb musst du vorsichtig sein. – CodeWizard