
Also... wir haben unser SVN-Repository verloren. Durch unglückliche Umstände haben wir auch kein brauchbares Backup.
Was tun? Einfach einen „SVN-Export“ von jemandem mit dem aktuellsten Update durchführen und von vorne beginnen? Gibt es eine Möglichkeit, den Verlauf wiederherzustellen? Oder unsere lokalen Checkouts mit einem neuen Server verbinden?
Antwort1
Wenn Sie nur über eine Kasse verfügen, haben Sie einen Snapshot des Codes, jedoch keinen Verlauf.
Sie können daraus ein neues Repository erstellen. Wenn Sie vorhandene Checkouts nach der Einrichtung mit dem neuen Repository verbinden, ist das wahrscheinlich mehr Aufwand als es wert ist. Es ist einfacher, aus dem ältesten Checkout ein neues Repository zu erstellen und dann Änderungen aus neueren Checkouts als Updates zu übernehmen.
Was die Wiederherstellung des Verlaufs betrifft, sehe ich nicht, wie das möglich sein soll, ohne irgendwann einen Dump des Repositorys (über svnadmin dump) zu erstellen. Sogar ein alter Dump würde Ihnen den gesamten Verlauf von der Erstellung des Repositorys bis zu dem Punkt liefern, an dem der Dump erstellt wurde.
Vielleicht hat irgendwann jemand git-svn für Ihr Repo verwendet? Dadurch könnte ein Teil der Historie erhalten geblieben sein, aber es dürfte nicht so einfach sein, diese in ein neues Subversion-Repo zurückzuspielen.
Die Datenwiederherstellung ist teuer, kann aber dennoch eine Option sein, wenn das Speichergerät, auf dem sich Ihr Repo befand, nicht physisch zerstört oder überschrieben wurde (und es sich nicht um eine SSD handelte).
Antwort2
Wenn Sie Ihr Repo wirklich verloren haben und keine Backups vorhanden sind, dann ist es tatsächlich weg. Es gibt keine Zauberei, mit der sich wirklich verlorene Daten wiederherstellen lassen.
Wenn Sie also eine Arbeitskopie von jemandem haben, können Sie ein neues Repository erstellen und die Dateien hinzufügen. Sie verlieren dabei (offensichtlich) den gesamten Verlauf, aber der Verlauf ist bereits verloren gegangen.
Sie könnten die Festplatte an ein Datenrettungsunternehmen schicken, um zu versuchen, alle Daten wiederherzustellen. Sobald Sie das Repo (oder zumindest die Verzeichnisse db/revs und db/revprops) haben, können Sie das Repo daraus neu erstellen (indem Sie sie in das Verzeichnis eines neuen Repo kopieren). Wenn sich herausstellt, dass Sie nicht die gesamte Datenbank haben, wird es etwas schwieriger, aber es ist trotzdem möglich, den Rest der Daten wiederherzustellen – möglicherweise müssen Sie alles an collabnet schicken und sich von ihnen Unterstützung holen, um die beschädigten Datendateien in einem neuen, funktionierenden Repo wiederherzustellen.
Sie sagen jetzt „svn export“ von jemandem mit dem aktuellsten Update … das lässt vermuten, dass die Person eine Sicherungskopie hat, aus der Sie exportieren können. Ist das der Fall oder haben Sie es mit einer Arbeitskopie verwechselt?
Antwort3
Wie Mark oben sagt, wenn Sie keinen Dump des Repositorys (vom Server) haben, können Sie den Verlauf nicht erstellen. Ein SVN-Checkout enthält nur die Spitze des Eisbergs, wo es ausgecheckt wird. Tut mir leid, Sie haben Pech gehabt. Ich schätze, das ist der Grund, warum die Leute verteilte Quellcodeverwaltung mögen. In unserem Unternehmen habe ich es so eingerichtet, dass zweimal täglich SVN-Diffs an Amazon S3 gesendet werden.
Antwort4
Erstens: Kein Backup eines SVN-Repos zu haben, ist ärgerlich und sollte nie passieren. Aber mir ist dasselbe passiert. Ich habe wieder angefangen, Tausende von Dateien hinzuzufügen, Datei für Datei, weil ich keine temporären oder andere No-Source-Dateien einchecken möchte.
Fast die gesamte Geschichte ist verloren. Abernicht der letzte Checkin-Status geht verloren! Ich habe es geschafft, den letzten Check-in-Status abzurufen, sodass das neue Repo dem alten ähnelte und ich auch den letzten Diff erhalten habe!
Das ist mein Rezept:
- Sichern Sie Ihren lokalen Checkout
- Räumen Sie Ihre lokale Kasse auf, siehe:Screenshot svn-cleanup_to_last_state
- neues Repo erstellen
- Checken Sie das neue Repo in einen neuen leeren Ordner aus
- Kopieren Sie die alte bereinigte Kopie in einen neuen Ordner
- einfach alle Dateien hinzufügen
- begehen
- überschreiben Sie Ihren neuen Checkout-Ordner mit der Sicherung von 1.
jetzt haben Sie alle Dateien wie zuvor, mit dem letzten Diff und nur die Dateien mit Versionsangabe, wie zuvor.