subversion


svn
Ekkart Kleinod  • 

SVN-Repository spiegeln/sichern

Wir nutzen svnadmin und svnsync für ein Backup. Dabei erstellen wir ein Zielrepository, das alle Revisionen enthält aber nicht ausgecheckt ist.

Damit das funktioniert, müssen die Rechte im Zielrepository so gesetzt werden, dass svnsync ausgeführt werden darf. Das wird über den pre-Hook pre-revprop-change erreicht, der dafür ohne Fehler beenden muss. Im Beispiel wird keine Überprüfung durchgeführt, da das Backup lokal läuft. Irgendwo anders sollten sinnvolle Prüfungen im Hook durchgeführt werden.

Zielrepository Beispiel: /home/ekleinod/myrepo

Erstmalig:

  1. leeres SVN-Repository erzeugen (relativer Pfad möglich)
  2. pre-revprop-change-Hook anlegen (relativer Pfad möglich)
  3. pre-revprop-change-Hook ausführbar machen (relativer Pfad möglich)
  4. Synchronisation initialisieren (absoluter Pfad nötig)
  5. Synchronisation durchführen (absoluter Pfad nötig, nach der Initialisierung der einzige Befehl, der nötig ist)
$ svnadmin create /home/ekleinod/myrepo
$ echo '#!/bin/sh' > /home/ekleinod/myrepo/hooks/pre-revprop-change
$ chmod 755 /home/ekleinod/myrepo/hooks/pre-revprop-change
$ svnsync initialize file:///home/ekleinod/myrepo <sourcerepo-URL>
$ svnsync synchronize file:///home/ekleinod/myrepo

Danach jedes weitere Backup:

  1. Synchronisation durchführen
$ svnsync synchronize file:///home/ekleinod/myrepo

exec-Flag

Leider wird oft das exec-Flag gesetzt, wenn man z.B. Dateien über einen USB-Stick ins Repository bringt, der mit FAT formatiert ist.

Dann kann man schnell nach Dateien mit exec-Flag suchen:

$ svn proplist --recursive * | grep executable --before-context=1

Statt "*" kann hier auch ein Repsoitory eingetragen werden, oder, wenn man schon im Repository-Verzeichnis ist, nichts:

$ svn proplist --recursive <repdir> | grep executable --before-context=1
$ svn proplist --recursive | grep executable --before-context=1