gesamtes Subversion Repository auf vorherige Version zurücksetzen
Sollte man einmal in die Not kommen, ein gesamtes Repository auf eine frühere Version zurückzusetzen, weil durch einen Import selbst trunk- und branch-Verzeichnisse nicht mehr vorhanden sind, wird es etwas haarig.
Bei mir heute genauso passiert, als ich eigentlich ein paar Unterverzeichnisse in den trunk importieren wollte, versehentlich aber in das Hauptverzeichnis des Repositorys schrieb.
Folgendes Vorgehen empfiehlt sich dann:
- Alten Revisionsstand auschecken (der wird dann wieder ins Repository eingefügt)
- Änderung an der temporären Arbeitskopie vornehmen (damit die Änderungen in das Repository übernommen werden)
- Änderung der temporären Arbeitskopie überführen (um die originale Arbeitskopie aktualisieren zu können)
- Temporäre Arbeitskopie aktualisieren
- Verzeichnisse löschen, die nicht mehr benötigt werden
(in meinem Falle brauchte ich die fälschlich importierten Verzeichnisse nicht unbedingt aufzuheben, weil sie noch an anderer Stelle korrekt lagen)
Alten Revisionsstand auschecken
momentaner Status des Repositorys vor diesem Schritt
/falsch_importiert_1/
/falsch_importiert_2/
/falsch_importiert_3/
was ist zu tun
- Verzeichnis für eine temporäre Arbeitskopie anlegen, in der die korrekte Revision liegt:
mkdir repo_new
- Einen Checkout von dem Revisionsstand in das temporäre Verzeichnis machen, bei dem noch alles in Ordnung ist:
svn checkout -r 7 file:///Users/kbessner/repositories/repo
Dieser Checkout sollte vom gesamten Repository erfolgen, nicht nur von einem Teilverzeichnis.
momentaner Status des Repositorys nach diesem Schritt
/falsch_importiert_1/
/falsch_importiert_2/
/falsch_importiert_3/
momentaner Status der temporären Arbeitskopie nach diesem Schritt
/trunk/verzeichnis_1/
/trunk/verzeichnis_2/datei1
/trunk/verzeichnis_3/datei2
/tags/version_1/verzeichnis_1/
/tags/version_1/verzeichnis_2/datei1
/tags/version_1/verzeichnis_3/datei2
Änderung an der temporären Arbeitskopie vornehmen
was zu tun ist
- In das Verzeichnis der temporären Arbeitskopie wechseln:
cd repo_new - Eine minimale, nicht destruktive Veränderung an einer der Dateien durchführen:
pico trunk/verzeichnis_2/datei1
Änderung der temporären Arbeitskopie überführen
was zu tun ist
- Das Repository aktualisieren:
svn commit -m "Testversionsänderung"
temporäre Arbeitskopie aktualisieren
was ist zu tun
- Die soeben veränderte, temporäre, funktionsfähige Arbeitskopie wieder in das Repository aktualisieren:
svn commit file:///Users/kbessner/repositories/repo -m "korrekte Version 7 wieder eingespielt"
momentaner Status des Repositorys nach diesem Schritt
/falsch_importiert_1/
/falsch_importiert_2/
/falsch_importiert_3/
/trunk/verzeichnis_1/
/trunk/verzeichnis_2/datei1
/trunk/verzeichnis_3/datei2
/tags/version_1/verzeichnis_1/
/tags/version_1/verzeichnis_2/datei1
/tags/version_1/verzeichnis_3/datei2
momentaner Status der temporären Arbeitskopie nach diesem Schritt
/trunk/verzeichnis_1/
/trunk/verzeichnis_2/datei1
/trunk/verzeichnis_3/datei2
/tags/version_1/verzeichnis_1/
/tags/version_1/verzeichnis_2/datei1
/tags/version_1/verzeichnis_3/datei2
Verzeichnisse löschen, die nicht mehr benötigt werden
was ist zu tun
- Im Repository befinden sich wieder die trunk- und branch-Verzeichnisse. Leider auch die fälschlich importierten Verzeichnisse, die im Repository gelöscht werden können.
- Löschen der unbenötigten Verzeichnisse:
svn delete falsch_importiert_1/ -m "an falscher Stelle importierte Verzeichnisse löschen". Analog werden die anderen beiden Verzeichnisse gelöscht.
momentaner Status des Repositorys nach diesem Schritt
/trunk/verzeichnis_1/
/trunk/verzeichnis_2/datei1
/trunk/verzeichnis_3/datei2
/tags/version_1/verzeichnis_1/
/tags/version_1/verzeichnis_2/datei1
/tags/version_1/verzeichnis_3/datei2
originale Arbeitskopie aktualisieren
was ist zu tun
- Wechseln zur originalen Areitskopie:
cd repo - Aktualisieren der originalen Arbeitskopie:
svn update
momentaner Status der originalen Arbeitskopie nach diesem Schritt
/trunk/verzeichnis_1/
/trunk/verzeichnis_2/datei1
/trunk/verzeichnis_3/datei2
/tags/version_1/verzeichnis_1/
/tags/version_1/verzeichnis_2/datei1
/tags/version_1/verzeichnis_3/datei2
