Wie immer gibt es mehrere Möglichkeiten um ein SVN Repository zu sichern und auch wiederherzustellen.
An dieser Stelle sollen nun die beiden Möglichkeiten des lokalen Sichern und Wiederhestellens und das Sichern und Wiederherstellen eines entfernten SVN Repositories (Remote Repository) mittels svnrdump beschrieben werden.
Das Sichern erfolgt auf der SSH Konsole mittels einer Dump Anweisung unter Angabe einer Datei in welche gesichert werden soll.
svnadmin dump /PfadZumRepository > svnexport.dump
Die erstellte Datei svnexport.dump enthält nun alle Repository Revisionen.
Zu beachten ist, dass keine Hooks mit gesichert werden. Diese befinden sich in dem Order /PfadZumRepository/hooks.
Das Einspielen des Dump Files ist ebenso einfach, allerdings muss natürlich vorher eine Repository erzeugt (svnadmin create /pfad/zum/repository) werden, falls noch nicht vorhanden.
Des Weiteren muss es sich nicht um das gleiche Repository handeln und auch der Pfad kann ein vollkommen anderer sein.
svnadmin load /PfadZumRepository < svnexport.dump
Da in der Regel die Dumps recht große Dateien sind, empfiehlt es sich den Dump zu komprimieren. Das man kann man in einer Zeile erledigen und man spart locker 50% Speicher.
svnadmin dump /PfadZumRepository | gzip -9 > svnexport.dump
Der Restore eines gzip komprimierten SVN Repositories ist ebenfalls als Einzeiler möglich.
gunzip -c svnexport.dump | svnadmin load /PfadZumRepository
Das Sichern erfolgt auch hier auf einer SSH Konsole mittels svnrdump.
Es wird lediglich die URL des Repositories benötigt und wie zuvor, der Dateiname für den Dump.
svnrdump dump http://domain.tld/repo > svnexport.dump
Die erstellte Datei svnexport.dump enthält nun alle Repository Revisionen.
Der Remote Export ist mit SVN Servern ab Version 1.4 möglich!
Das Einspielen des Dump Files ist ebenso einfach, allerdings muss natürlich vorher eine Repository erzeugt werden.
Für den Remote Import wird ein SVN Server ab Version 1.7 vorausgesetzt.
svnrdump load http://domain.tld/repo < svnexport.dump # oder, wenn Benutzername und Passwort benötigt werden svnrdump load http://domain.tld/repo < svnexport.dump --username admin --password admin --non-interactive
Im Optimalfall startet nun der Import und alles ist gut.
In 99% aller Fälle aber erhält man diesen Fehler:
svnrdump: E175002: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent svnrdump: E175008: At least one property change failed; repository is unchanged svnrdump: E175002: Error setting property 'rdump-lock': Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook
In diesem Fall muss das Ziel SVN Repository ein Hook eingerichtet werden.
Das geht natürlich nur, wenn man Zugriff auf das Dateisystem hat.
Und zwar muss im Hook Verzeichnis die ausführbare Datei pre-revprop-change mit dem Exit 0 erstellt werden .
printf '#!/bin/sh\nexit 0' > pre-revprop-change && chmod +x pre-revprop-change
Nun sollte der Remote Import durchlaufen.
Kleiner Tipp, unser SVN Hosting ist bereits dafür vorbereitet Ihre Dumps Remote zu importieren.