SVN Migration mit svnsync über http

Subversion ist eine Sourcecodeverwaltung von Dateien und Ordnern in einem Repository werden die dem Projekt zugehörigen Daten abgelegt. Auf einem Server können mehrere solcher Projektarchive abgelegt und verwaltet werden. Über diese Archive werden alle Versionsstände auf dem Server abgelegt. Die Benutzer arbeiten üblicherweise mit dem aktuellsten Stand, den ein solches Archiv hat.

Ich habe online einen solchen Server aufgesetzt und möchte diesen in einen neueren Server (den ich dieses mal anders aufgesetzt habe) migrieren. Dabei möchte ich idealerweise auf einen Dump verzichten (großer Dateitransfer, viele mögliche Fehlerquellen). Im Folgenden beschreibe ich, wie eine solche MIgration durchgeführt werden kann.

Installation von Subversion

Die Installation von einem neuen Debian Jessie Server ist recht einfach durchzuführen. Als Admin (root):

apt-get update 
apt-get install subversion apache2 libapache2-svn 
a2enmod authz_user 
mkdir /var/lib/svn 
svnadmin create /var/lib/svn 
chown -R www-data /var/lib/svn

Nach erfolgreicher Installation werden Benutzer angelegt. Für unsere Instanz wird der erste Benutzer mit „-cm“ angelegt, die folgenden nur mit „-m“. Die Vorgestellte Option „-b“ erlaubt uns das passwort über die commandline einzugeben statt interaktiv danach zu fragen.

htpasswd -bcm /etc/apache2/dav_svn.passwd testuser1 testuser1 
htpasswd -bm /etc/apache2/dav_svn.passwd testuser2 testuser2

Den Inhalt der erstellten Passwort-Datei kann mit folgendem Befehl abgefragt werden:

cat /etc/apache2/dav_svn.authz

Jetzt kann der Subversion Deamon gestartet werden und mit der Konfiguration von Webdav fortgeschritten werden.

svnserve -d -r /var/lib/svn a2enmod dav a2enmod dav_svn a2enmod authz_svn

Abschließend die Datei /etc/apache2/mods-available/dav_svn.conf anpassen.

nano /etc/apache2/mods-available/dav_svn.conf

Damit sie so aussieht (https ist nicht aktiviert):

<Location />
  DAV svn
  SVNParentPath /var/lib/svn/
  SVNListParentPath on
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
  AuthzSVNAccessFile /etc/apache2/dav_svn.authz
  Require valid-user 
</Location>

Am Ende noch den Apache durchstarten, damit ist alles fertig installiert und konfiguriert.

/etc/init.d/apache2 restart

Migration Remote to Local Subversion

Zuerst wird lokal ein Repository benötigt:

cd /var/lib/svn mkdir testlocal svnadmin create testlocal

Mit diesem Repository können wir den Vorgang starten:

echo '#!/bin/sh' > testlocal/hooks/pre-revprop-change chmod +x testlocal/hooks/pre-revprop-change svnsync init file:////var/lib/svn/testlocal http://<IP>:<PORT>/<REPOSITORY>

Jetzt sind die Vorbereitungen abschlossen und wir können den Transfer starten:

svnsync sync file:////var/lib/svn/testlocal

Das ganze dauert nun ein wenig, danach sind alle historischen Daten vom alten auf das neue Repository übertragen.

Migration Remote to Remote Subversion

Hier verfahren wir nach dem gleichen Muster. Zuerst das Repository (testlocal) anlegen:

cd /var/lib/svn mkdir testlocal svnadmin create testlocal

Mit diesem Repository können wir nun den Vorgang ebenfalls starten:

echo '#!/bin/sh' > testlocal/hooks/pre-revprop-change chmod +x testlocal/hooks/pre-revprop-change svnsync init http://<TARGET-IP>/testlocal http://<SOURCE-IP>/testlocal

Jetzt sind die Vorbereitungen abschlossen und wir können den Transfer starten:

svnsync sync http://<TARGET-IP>/testlocal

Auch hier dauert das ganze nun ein wenig, danach sind alle historischen Daten vom alten auf das neue Repository übertragen.

Quellen

  • https://www.thomas-krenn.com/de/wiki/Subversion_unter_Debian_mit_Webaccess
  • http://pogopixels.com/blog/dumping-a-svn-repository-from-a-remote-url/
  • http://petrkout.com/linux/copy-your-subversion-repository-using-urls-with-svnsync/