Subversion einrichten, Sicherung einspielen und aus CVS importieren

Druckversion

Es soll ein Repository mit Subversion eingerichtet und ein Export aus einem anderen Subversion- bzw. CVS-Repository mit vollständiger Historie importiert werden.

In diesem Beitrag werden folgende Themen dargestellt:

Aufsetzen eines Subversion-Repositories

Nachdem die benötigte Software installiert und ein Benutzer svn sowie eine Benutzergruppe svn eingerichtet wurde, kann ein Repository angelegt werden. Dazu wird zuerst ein Ablageort erzeugt und ein rudimentäres Repository angelegt.

$ mkdir /srv/svn/repository
$ svnadmin create /srv/svn/repository

Dieses Repository muss nun dem Benutzer und der Benutzergruppe zu geordnet werden. Alle Benutzer dieses Repositories müssen zu der Benutzergruppe svn gehören.

$ chown -R svn /srv/svn/repository
$ chgrp -R svn /srv/svn/repository

Zusätzlich müssen alle Mitglieder der Benutzergruppe Schreibrecht auf das Repository haben. Allerdings wird das Schreib- und Leserecht auf die Konfiguration gleich wieder auf dem Benutzer svn beschränkt.

$ chmod -R g+w /srv/svn/repository
$ chmod -R go-rw /srv/svn/repository/conf
$ chmod -R o-r /srv/svn/repository/conf

Nun kann schon lokal auf das Repository z.B. mit

$ svn list file:///srv/svn/repository

zugegriffen werden. Da aber auch der entfernte Zugriff möglich sein soll, wird nun der Serverprozess gestartet.

$ svnserve -d

Der Standard-Port für Subversion ist 3690. Mit dem Parameter --listen-port n kann auch ein anderer Port angegeben werden.

Damit nun auch Benutzer zugreifen können, wird in der Datei conf/passwd die Benutzer mit ihren Passwörtern abgelegt. Diese Benutzer können dann über den Serverprozess auf das Repository zugreifen.

Inhalt von /srv/svn/repository/conf/passwd
  1. ### This file is an example password file for svnserve.
  2. ### Its format is similar to that of svnserve.conf. As shown in the
  3. ### example below it contains one section labelled [users].
  4. ### The name and password for each user follow, one account per line.
  5.  
  6. [users]
  7. # harry = harryssecret
  8. # sally = sallyssecret
  9. username = password

Danach müssen noch die Konfiguration conf/svnserve.conf für das Repository bearbeitet werden. Dort wird der generelle Zugriff für unautorisierte (Zeile 12) und autorisierte (Zeile 13) Benutzer bearbeitet. In der Zeile 20 wird der Dateiname mit den Passwörtern und in Zeile 32 der Name des Realm angegeben.

Inhalt von /srv/svn/repository/conf/svnserve.conf
  1. ### This file controls the configuration of the svnserve daemon, if you
  2. ### use it to allow access to this repository.  (If you only allow
  3. ### access through http: and/or file: URLs, then this file is
  4. ### irrelevant.)
  5.  
  6. ### Visit http://subversion.tigris.org/ for more information.
  7.  
  8. [general]
  9. ### These options control access to the repository for unauthenticated
  10. ### and authenticated users.  Valid values are "write", "read",
  11. ### and "none".  The sample settings below are the defaults.
  12. anon-access = read
  13. auth-access = write
  14. ### The password-db option controls the location of the password
  15. ### database file.  Unless you specify a path starting with a /,
  16. ### the file's location is relative to the directory containing
  17. ### this configuration file.
  18. ### If SASL is enabled (see below), this file will NOT be used.
  19. ### Uncomment the line below to use the default password file.
  20. password-db = passwd
  21. ### The authz-db option controls the location of the authorization
  22. ### rules for path-based access control.  Unless you specify a path
  23. ### starting with a /, the file's location is relative to the the
  24. ### directory containing this file.  If you don't specify an
  25. ### authz-db, no path-based access control is done.
  26. ### Uncomment the line below to use the default authorization file.
  27. # authz-db = authz
  28. ### This option specifies the authentication realm of the repository.
  29. ### If two repositories have the same authentication realm, they should
  30. ### have the same password database, and vice versa.  The default realm
  31. ### is repository's uuid.
  32. realm = My Repository

Nun kann auf das Repository von aussen zugegriffen werden.

$ svn list svn://localhost/srv/svn/repository

Importieren eines Subversion-Repositories

Zunächst wird ein bestehenden Subversion-Repository exportiert. Dieses muss im gleichen Dateisystem erfolgen, wo auch das Repository liegt.

$ svnadmin dump /srv/svn/projects > projects-dumpfile
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
...

Als nächstes wird im neuen Repository ein neues Verzeichnis projects angelegt.

$ svn mkdir -m "Initial projects root" file:///srv/svn/repository/projects
Committed revision 1.

Jetzt kann das alte Repository unter dem neuen Verzeichnis mit allen Historien in das neue Repository eingespielt werden. Wiederum muss der Befehl im gleichen Dateisystem, wo das neue Repository liegt, durchgeführt werden.

$ svnadmin load /srv/svn/repository --parent-dir projects < projects-dumpfile
<<< Started new transaction, based on original revision 1
     * adding path : projects/... ... done.
 
------- Committed new rev 2 (loaded from original rev 1) >>>
...

Falls das alte Repository nicht unter dem neuen Verzeichnis abgelegt werden soll, so kann der Parameter --parent-dir weggelassen werden.

Liegen das alte und neue Repository im gleichen Dateisystem, kann auch folgender Befehl verwendet werden.

$ svnadmin dump /srv/svn/projects | svnadmin load /srv/svn/repository --parent-dir projects

Das neue Repository steht sofort nach den Änderungen bereit.

Importieren eines CVS-Repositories

Zunächste wird ein bestehendes CVS-Prpository exportiert.

$ cvs2svn --dumpfile=projects-cvs2svn-dump --encoding=utf_8 /srv/cvs/projects

Nun wurde die Datei projects-cvs2svn-dump im aktuellen Verzeichnis erstellt. Diese kann nach dem Verfahren aus dem vorherigen Kapitel ins neue Repository importiert werden.

$ svnadmin load /srv/svn/repository --parent-dir projects < projects-cvs2svn-dump

Nun ist das alte CVS-Repository mit allen seinen Historien im neuen Repository vorhanden.

Eine Alternative ist, wenn altes und neues Repository im gleichen Dateisytem liegen, folgender Befehl. Dieser kopiert das alte CVS-Repository mit allen Historien in das neue Subversion- Reposity.

$ cvs2svn -s /srv/svn/repository /srv/cvs/repository

Offene Schritte

  • Den Zugriff über die HTTP/HTTPS-Erweiterung WebDAV ermöglichen, dazu wird ein Apache 2-Webserver benötigt.
  • Upgrade von Subversion auf eine höhere Version.

Mehr zum Thema:

 

Kommentare

Bild des Benutzers Frank W. Rahn

Dazu über das Optware IPKG Subversion installieren

$ ipkg update
$ ipkg install svn

Nun muss der Server in der autorun.sh eingefügt werden

$ mount -t ext2 /dev/mtdblock5 /tmp/config
$ vi /tmp/config/autorun.sh

Folgende Zeilen anhängen

$ rm -ef /opt
$ ln -sf /share/MD0_DATA/optware/opt /opt
$ /opt/bin/svnserve -d --pid-file=/tmp/svnserve.pid

Nach dem Bearbeiten mit folgendem Befehl wieder entfernen

$ umount /tmp/config

 

Neuen Kommentar schreiben