Repariere beschädigtes SVN-Repository

8

Ich benutze svnX (0.9.13) unter Mac OS X Lion (10.7.2 11C74) und habe scheinbar ein beschädigtes SVN-Repository, was ich glaube. Ich habe die Website nach ähnlichen Fragen durchsucht und gefunden a couple , aber keiner beschreibt, wie Sie wiederherstellen können, wenn Sie einen Checkout aus dem Repository. Ich habe auch kein aktuelles Arbeitsverzeichnis.

Der spezifische Fehler ist:

  

svn: Prüfsummenfehler beim Lesen der Darstellung:
  erwartet: [hash]
  aktuell: [anderes Hash]

Wenn die Warnung abgewiesen wird (die einzige Option), wird das Auschecken bis zum Ende fortgesetzt. Auf den ersten Blick scheinen die meisten Dateien dort zu sein, aber wenn ich die Anwendung starte, ist es klar, dass es einen Mischmasch an Versionen gibt. Das Repository befindet sich auf einem USB-Flash-Laufwerk, was eine Quelle der Korruption sein könnte. Ich bin der einzige Benutzer, der auf diese Dateien zugreift und sie wurden seit über einer Woche nicht mehr berührt und befanden sich in einem funktionierenden Zustand.

Irgendwelche Vorschläge, wie Sie weiter vorgehen würden, wären willkommen.

    
Noren 12.01.2012, 20:26
quelle

2 Antworten

15

Wenn Sie ein beschädigtes Repository haben, besteht Ihre einzige wirkliche Chance beim Speichern der Informationen darin, einen Speicherauszug zu erstellen und zu laden. Wenn Sie Glück haben, können Sie mit einem Dump und Load manchmal die Beschädigung korrigieren.

Wenn nicht, können Sie den Parameter -r <from>:<to> auf dem Dump verwenden, um die fehlerhaften Revisionen zu überspringen. Sie können mehrere Speicherabbilddateien erstellen und diese in einem einzigen Repository zusammenführen, sodass Sie die falschen Revisionsnummern überspringen können. Ich habe festgestellt, dass jede Dump-Datei mit einer vollständigen Revision des Repository bei dieser Revision beginnt, und der Dump / Load-Prozess ist in der Regel intelligent genug, um Änderungen nicht zu verdoppeln.

Tatsächlich glaube ich, dass Sie sogar mehrere Dumps ohne allzu viele Probleme in eine einzige Dump-Datei schreiben können. Das Folgende sollte die Revisionen 1001 und 1204, die schlechte Revisionen sind, überspringen:

%Vor%

Es gibt mehrere Subversion-Backup-Skripte, die das Repository sichern, indem sie Dumps der neuesten Revisionen erstellen. Zum Beispiel, wenn Sie es zum ersten Mal ausführen, wird alles von der ersten Revision auf die letzte Version (sagen wir Revision 1000). Am nächsten Tag wird die Revision 1001 auf die letzte Revision (z. B. 1003) und am nächsten Tag auf Revision 1004 auf die letzte Revision zurückgesetzt.

Zum Wiederherstellen müssen Sie alle Sicherungen wiederherstellen, aber die Sicherungszeiten sollten kürzer sein als jedes Mal, wenn Sie eine vollständige Sicherung durchführen.

Sie können auch eine Hotcopy ausführen, aber ich finde eine Hotcopy nicht viel schneller als einen Dump, und es könnte Probleme geben, wenn Sie Ihr Repository auf einen anderen Rechner verschieben müssen.

    
David W. 15.01.2012, 21:48
quelle
2

Sie sollten einen Speicherabzug machen und laden, wie David W. vorgeschlagen hat. Es gibt jedoch einige Probleme, denen ich begegnet bin und ich möchte eine vollständige Lösung veröffentlichen.

Bei einigen Revisionen tritt Korruption normalerweise in einzelnen Dateien auf. Wir müssen nicht eine gesamte Revision verwerfen, nur weil eine Datei eine Prüfsummenabweichung aufwies.

Zuerst versuchen wir, die Prüfsummenberechnung zu deaktivieren, indem wir Zeilen entfernen, die mit Text-content-md5

übereinstimmen %Vor%

Der inkrementelle Ansatz ermöglicht es uns, Fehler zu beheben und unseren Fortschritt fortzusetzen. Wenn während des Dumps und Ladens ein Fehler auftritt, suchen Sie nach der letzten Nachricht --- Committed revision X >>> --- und setzen Sie X + 1 als Startversion als Parameter -r und versuchen Sie es erneut. Dies spart viel Zeit.

%Vor%

Oder laden Sie einfach von der Dump-Datei:

%Vor%

Wenn das nicht genug war und Sie den Fehler 'Vorzeitiges Ende von Inhaltsdaten in Dumpstream' oder etwas ähnliches erhalten, sollten Sie diese Datei vollständig aus dem Speicherauszug von svndumpfilter ausschließen:

%Vor%

Der obige Befehl schließt die Datei myproject/lib/thirdparty-all.jar aus dem Speicherauszug aus.

Zusätzliche Informationen:

  • Sie könnten --bypass-prop-validation an svnadmin load command anhängen. Dies funktioniert, wenn die Korruption gering ist.
  • Korrektur Dump stream contains a malformed header (with no ':') Fehler beim Anhängen von | grep --binary-files=text -v '^* Dumped revision'
    zur Rohrkette (vor svnadmin load ).

Ich hoffe, dieser Beitrag ist für einige Leute nützlich.

    
bekce 11.03.2017 14:35
quelle

Tags und Links