SVN Anleitung · 2 min read · Feb 13, 2026
Erstellen eines schreibgeschützten Spiegels Ihres SVN-Repositorys mit SVK
Erstellen eines schreibgeschützten Spiegels Ihres SVN-Repositorys mit SVK
Angenommen, Sie haben ein SVN für Ihr OpenSource-Projekt und möchten es an einem entfernten Ort spiegeln, der OpenSource-Projekte hostet (wie SourceForge.net oder dev.java.net). Ich überspringe die Phase der Konto- und Projektregistrierung und gehe davon aus, dass Sie bereits Ihre Anmeldeinformationen und die SVN-Repo-URL haben. Ich gehe auch davon aus, dass Sie Debian oder Ubuntu verwenden und Ihr SVN unter Apache httpd läuft.
Es gibt ein Tool namens svnsync, das standardmäßig mit SVN 1.4 geliefert wird und genau für diesen Zweck entwickelt wurde, aber es gibt eine Sache, die uns in diesem Fall daran hindert, es zu verwenden. Es erfordert einen benutzerdefinierten SVN-Hook, der im Ziel-Repository vorhanden ist, und das ist in unserem Fall unmöglich anzupassen.
Was Sie tun, ist, zuerst SVK zu installieren:
# aptitude install svkGroß gesagt, SVK ist ein Superset von SVN und ermöglicht somit einige erweiterte Tricks wie die Repository-Synchronisierung. Es gibt ein Buch über Versionskontrolle mit SVK, auf das Sie als umfassenden SVK-Leitfaden verweisen können. Ich werde mich kurz halten. Das Konzept ist, dass Sie ein SVK-Repository (das “Depot”) erstellen, das eine Kopie aller beteiligten SVN-Repos enthält (Ihr primäres Repo und die, in die Sie Informationen dumpen) und dann diese Kopien synchronisieren.
Da wir möchten, dass Repos jedes Mal synchronisiert werden, wenn ein Commit durchgeführt wird, würde das SVN-Hook-Verfahren genutzt werden, und in unserem Fall würde das unter dem Benutzer apache httpd geschehen.
Um die Dinge einfach zu halten, lassen Sie uns unter diesem Konto anmelden und die erforderliche Routine durchführen.
# su www-dataJetzt müssen wir das Standarddepot initialisieren.
$ svk depotmapBearbeiten Sie den Pfad, um anzugeben, wo Sie das Depot speichern möchten. Ich würde /var/opt/svk/local wählen.
Jetzt sind Sie in der Lage, mindestens 2 Spiegel zu erstellen: einen für das lokale Repo und einen für das entfernte (nichts hindert Sie daran, mehrere Spiegel zu haben):
$ svk mirror //local file:///var/opt/svnSo haben wir den Repo-Standort (genannt “local”) direkt mit dem Dateisystemstandort verknüpft, an dem sich das SVN-Repository befindet.
$ svk mirror //remote https://myproject.svn.sourceforge.net/svnroot/myprojectDas Gleiche gilt für das entfernte Repo, in diesem Fall gehostet auf SourceForge.net. Sie müssen das Zertifikat dauerhaft akzeptieren und Ihren Benutzernamen und Ihr Passwort angeben, um es zwischenspeichern zu können.
Da das entfernte Repo schreibgeschützt ist, werden wir es nur einmal synchronisieren
$ svk sync //remoteund dann die Aktionen durchführen, die später durch das Post-Commit-Skript durchgeführt werden.
$ svk sync //local
$ svk smerge --baseless --incremental --verbatim //local //remoteDer letzte Befehl synchronisiert das lokale Repo mit dem entfernten und bewahrt alle Commit-Details.
Damit dies automatisch nach einem Commit im lokalen Repo geschieht, erstellen Sie eine Datei mit dem Namen post-commit im hooks-Verzeichnis Ihres lokalen SVN-Repos und fügen Sie diese Befehle dort ein. Machen Sie sie ausführbar mit
$ chmod +x ./post-commit #vorausgesetzt, Sie befinden sich im ''hooks''-VerzeichnisDas war’s, schauen Sie es sich an.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.