Subversion Setup · 4 min read · Jan 02, 2026
Einrichten eines Subversion-Repositorys mit Apache, mit automatisch aktualisierbarem Arbeitskopie - Seite 2
Erstellen eines Repositorys:
Angenommen, ich möchte ein Repository unter /usr/local/subversion/repository mit einer fsfs-Datenbank erstellen, also führe den Befehl aus:
mkdir -v /usr/local/subversion//usr/bin/svnadmin create --fs-type fsfs /usr/local/subversion/repositoryDas sollte ein Subversion-Repository unter /usr/local/subversion/repository erstellen.
ls /usr/local/subversion/repositoryconf/ dav/ db/ format hooks/ locks/ README.txtSie sollten diese Dateien im Repository-Verzeichnis sehen können.
Einrichten von httpd.conf zum Bereitstellen des erstellten Repositorys:
Fügen Sie die folgenden Zeilen zu httpd.conf oder der entsprechenden Apache-Konfigurationsdatei hinzu.
DAV svn
SVNPath /usr/local/subversion/repository/
Stellen Sie sicher, dass das Modul mod_dav in der Apache-Konfigurationsdatei geladen ist und auch im Modulverzeichnis vorhanden ist.
Einrichten der Authentifizierung:
Für die Authentifizierung müssen wir die Apache-Konfiguration ein weiteres Mal ändern.
Die grundlegende Authentifizierung erfordert, dass wir die folgenden Zeilen zu httpd.conf hinzufügen, wo wir zuvor das SVN-Repository hinzugefügt haben.
AuthType Basic
AuthName "{Name des Authentifizierungs-Popup-Tabs}"
AuthUserFile {Pfad zur Passwortdatei}
Require valid-userEs sollte also so aussehen.
DAV svn
SVNPath /usr/local/subversion/repository/
AuthType Basic
AuthName "Subversion-Repository"
AuthUserFile /usr/local/subversion/repository/conf/svn-auth-file
Require valid-user
Es ist notwendig, dass wir Benutzer zur Passwortdatei hinzufügen, bevor jemand darauf zugreifen kann, was im nächsten Schritt beschrieben wird.
Hinzufügen von SVN-Benutzern:
Da wir SVN mit einem Apache-Server und einer grundlegenden Authentifizierungsmethode verwenden.
Müssen wir eine Passwortdatei mit dem htpasswd-Binary erstellen, das mit einer Standard-Apache-Installation bereitgestellt wird.
htpasswd -cmd /usr/local/subversion/repository/conf/svn-auth-file {benutzername}-c Option erstellt eine neue htpasswd-Datei.
-m verschlüsselt das Passwort mit einem MD5-Algorithmus.
-d verschlüsselt das Passwort mit einem CRYPT-Algorithmus.
Wo {benutzername} für einen tatsächlichen Benutzernamen steht, der für die Authentifizierung verwendet wird.
Warnung: Wir sollten die -c-Option nicht verwenden, nachdem wir den ersten Benutzer hinzugefügt haben. Andernfalls wird die Datei erstellt und alle vorhandenen Benutzer innerhalb der Datei ersetzt.
htpasswd -md /usr/local/subversion/repository/conf/svn-auth-file {benutzername}Einrichten des anfänglichen Repository-Layouts:
Ein Repository enthält hauptsächlich 3 Standardordner.
branchestagstrunkUm diese Standardordner in einem Repository zu erstellen, erstellen Sie einen temporären Ordner, wo immer Sie möchten, /tmp wäre eine gute Idee, mit den folgenden Unterverzeichnissen.
mkdir -pv /tmp/subversion-layout/{branches,tags}Nachdem wir alle Layout-Ordner erstellt haben, verschieben Sie alle Inhalte Ihres Projekts in den trunk-Ordner.
mv -v /usr/local/apache2/htdocs /tmp/subversion-layout/trunkDann machen Sie einen ersten Import des temporär erstellten Verzeichnisses.
/usr/local/subversion/bin/svn import /tmp/subversion-layout/ http://127.0.0.1/subversion/Dies wird Ihnen ein Standard-Repository-Layout einrichten und eine erste Revision erstellen.
Einrichten einer Arbeitskopie:
Wir können die temporären Ordner, die wir im letzten Schritt erstellt haben, löschen, da sich alle Dateien bereits im Repository befinden.
Jetzt müssen wir eine Arbeitskopie aller Dateien im Repository unter /usr/local/apache2/htdocs erstellen.
So dass, wann immer ein Entwickler die PHP-Codes aktualisiert, sie die Codeänderungen in einer Arbeitsumgebung sehen können.
Aber das Einrichten einer Arbeitskopie würde diese Aufgabe nicht erfüllen, wir müssten die Hook-Skripte zum Arbeiten mit einer Arbeitskopie bringen.
So wird jedes Mal, wenn ein Entwickler in das Repository committet, das Hook-Skript selbst ausgeführt und die Arbeitskopie aktualisiert.
Stellen Sie sicher, dass der htdocs-Ordner unter /usr/local/apache2/ nicht bereits existiert.
Wenn Sie möchten, können Sie ihn in htdocs_old umbenennen.
Um eine Arbeitskopie einzurichten, tun Sie Folgendes.
cd /usr/local/apache2/su – apache/usr/local/subversion/bin/svn checkout http://127.0.0.1/subversion/trunk/ htdocsEinrichten der Hook-Skripte:
Ein Hook ist ein Programm, das durch ein Ereignis im Repository ausgelöst wird, wie z.B. die Erstellung einer neuen Revision oder die Änderung einer nicht versionierten Eigenschaft. Jeder Hook erhält genügend Informationen, um zu erkennen, welches Ereignis vorliegt, auf welchem Ziel(en) er arbeitet und den Benutzernamen der Person, die das Ereignis ausgelöst hat. Je nach Ausgabe oder Rückgabestatus des Hooks kann das Hook-Programm die Aktion fortsetzen, stoppen oder in irgendeiner Weise aussetzen.
Das Unterverzeichnis hooks ist standardmäßig mit Vorlagen für verschiedene Repository-Hooks gefüllt.
post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmplpost-lock.tmpl pre-commit.tmpl pre-unlock.tmplpost-revprop-change.tmpl pre-lock.tmpl start-commit.tmplFür jetzt werde ich über das post-commit-Hook-Skript sprechen, da wir das in unserem Fall benötigen.
Kopieren Sie die Datei post-commit.tmpl in post-commit im selben Hooks-Verzeichnis und geben Sie post-commit Ausführungsrechte.
cp -v /usr/local/subversion/repository/hooks/post-commit.tmpl /usr/local/subversion/repository/hooks/post-commitchmod +x /usr/local/subversion/repository/hooks/post-commitJetzt bearbeiten Sie das post-commit-Skript und kommentieren Sie die folgenden zwei Zeilen am Ende aus und fügen Sie die folgende Zeile hinzu.
#commit-email.pl "$REPOS" "$REV" [email protected]
#log-commit.py --repository "$REPOS" --revision "$REV"
/usr/bin/svn update /usr/local/apache2/htdocs/ >> /usr/local/subversion/repository/logs/post-commit.logNachdem Sie das getan haben, erstellen Sie einen neuen Ordner logs unter /usr/local/subversion/, damit wir das Logging aktivieren können, und erstellen Sie eine leere post-commit.log-Datei.
mkdir -v /usr/local/subversion/repository/logs/touch /usr/local/subversion/repository/logs/post-commit.logEin weiteres Mal müssen wir sicherstellen, dass der Repository-Ordner die richtige Benutzerbesitz hat, es wird empfohlen, den Besitz für /usr/local/subversion/repository/ auf den Benutzer apache zu setzen.
chown -Rv apache.apache /usr/local/subversion/repository/Wenn alles gut geht, sollte das alles sein.
Sie haben jetzt einen funktionierenden Subversion-Repository-Server, der bereit für weitere Importe ist, sobald Sie den Apache-Server starten.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.