SVN

Aus Cowwwiki
Zur Navigation springen Zur Suche springen

Auf dieser Seite erkläre ich die Installation und Einrichtung des SVN-Repository. SVN wird zur Quellcodeverwaltung eingesetzt und wird von vielen Entwicklungsumgebungen nativ unterstützt. So lassen sich neue Projekte ohne Probleme in Netbeans auschecken bzw. einchecken.

Die Installation habe ich auf einem Ubuntu 10.04 LTS Server durchgeführt. Die Benutzer müssen sich authentifizieren, um auf das Repository zugreifen zu können. Der Zugriff erfolgt über HTTP Apache.

Server

Installation

Achtung: Diese Installationsvariante setzt einen Apache-Webserver voraus

Um den SVN zu installieren führt man am besten zuerst ein Systemupdate aus.


apt-get update && apt-get upgrade && apt-get dist-upgrade


Anschließend muss man folgende Module installieren:

  • subversion
  • libapache2-svn


apt-get install subversion libapache2-svn


Konfiguration

Als nächstes legt man ein Verzeichnis für das Repository fest. Oft wird dafür /var/local/svn verwendet.


mkdir -p /var/local/svn


Repository Datenbank erstellen


svnadmin create --fs-type fsfs /var/local/svn


und für den Apache Webserver schreibbar machen:


chown -R www-data: /var/local/svn


Nun muss auf dem Apache2 ein Modul aktiviert werden


a2enmod dav_svn


Anschließend öffnet man die erzeugte Datei /etc/apache2/mods-enabled/dav_svn.conf und aktiviert folgende Parameter


# dav_svn.conf - Example Subversion/Apache configuration
#
# For details and further options see the Apache user manual and
# the Subversion book.
#
# NOTE: for a setup with multiple vhosts, you will want to do this
# configuration in /etc/apache2/sites-available/*, not here.

# <Location URL> ... </Location>
# URL controls how the repository appears to the outside world.
# In this example clients access the repository as http://hostname/svn/
# Note, a literal /svn should NOT exist in your document root.
<Location /svn>

  # Uncomment this to enable the repository
  DAV svn

  # Set this to the path to your repository
  SVNPath /var/local/svn
  # Alternatively, use SVNParentPath if you have multiple repositories under
  # under a single directory (/var/lib/svn/repo1, /var/lib/svn/repo2, ...).
  # You need either SVNPath and SVNParentPath, but not both.
  #SVNParentPath /var/lib/svn

  # Access control is done at 3 levels: (1) Apache authentication, via
  # any of several methods.  A "Basic Auth" section is commented out
  # below.  (2) Apache <Limit> and <LimitExcept>, also commented out
  # below.  (3) mod_authz_svn is a svn-specific authorization module
  # which offers fine-grained read/write access control for paths
  # within a repository.  (The first two layers are coarse-grained; you
  # can only enable/disable access to an entire repository.)  Note that
  # mod_authz_svn is noticeably slower than the other two layers, so if
  # you don't need the fine-grained control, don't configure it.

  # Basic Authentication is repository-wide.  It is not secure unless
  # you are using https.  See the 'htpasswd' command to create and
  # manage the password file - and the documentation for the
  # 'auth_basic' and 'authn_file' modules, which you will need for this
  # (enable them with 'a2enmod').
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd

  # To enable authorization via mod_authz_svn
  #AuthzSVNAccessFile /etc/apache2/dav_svn.authz

  # The following three lines allow anonymous read, but make
  # committers authenticate themselves.  It requires the 'authz_user'
  # module (enable it with 'a2enmod').
  #<LimitExcept GET PROPFIND OPTIONS REPORT>
    #Require valid-user
  #</LimitExcept> 
  Require valid-user
</Location>


Nun fügen wir noch einen Benutzer hinzu


htpasswd -c /etc/apache2/dav_svn.passwd MaxMustermann


Hinweis: Wenn nur ein Benutzer hinzugefügt werden soll, dann den Befehl ohne -c ausführen. Sonst wird die Liste komplett verworfen.


Nun Apache neu starten und das Repository sollte unter http://localhost/svn/ verfügbar sein


service apache2 restart


Client

Als Client verwende ich die Entwicklungsumgebung (IDE Netbeans 6.9). Netbeans unterstützt von Haus aus das SVN.

Konfiguration

Wenn man Projekte mit vielen Dateien hat (z. B. Zend-Projekte) funktioniert das Einchecken möglicherweise nicht. Das liegt dann an einem HTTP-Timeout. Das Problem kann man lösen, indem man den HTTP-Timeout etwas höher setzt. Das kann man wie folgt machen:

  • ins /home/ Verzeichnis des Users wechseln (z. B. /home/user/)
  • im Unterordner .subversion die Datei servers mit Editor öffnen (z. B. vi servers)
  • am Ende http-timeout = 6000 anfügen und Datei speichern

Nun sollte das Einchecken auch bei Zend-Projekten einwandfrei funktionieren.

bestehendes Projekt auschecken

  • Netbeans 6.9 ganz normal starten
  • Team - Subversion - Checkout
  • Repository URL eingeben (z. B. http://easycow.de/svn)
  • Benutzername und Passwort eingeben und auf Weiter klicken
  • Repository-Folder über Browse auswählen
  • Local-Folder spezifzieren
  • Ein Klick auf Finish kopiert die Quellcodedateien auf den lokalen PC

neues Projekt hinzufügen

  • Netbeans 6.9 ganz normal starten
  • Neues Projekt anlegen
  • Dateien erzeugen, etc.
  • Wenn man seine Arbeit abgeschlossen hat auf Team - Subversion - Import into Repository auswählen
  • Repository URL eingeben (z. B. http://easycow.de/svn)
  • Benutzername und Passwort eingeben
  • Kommentareingabe ist zwingend. Andernfalls kann das Projekt nicht in das SVN hinzugefügt werden


Änderungen ins Repository übernehmen

Wenn man eine Datei aus dem Repository bearbeitet wird und diese speichert, wird der Dateiname "blau" dargestellt. Das heißt, dass die Datei nach dem Auschecken geändert wurde. Um die Änderungen ins Repository zu schieben, geht man wie folgt vor:

  • Rechtsklick auf die Datei, die bearbeitet wurde
  • Subversion - Commit auswählen
  • In Commit-Message muss die Änderung eingegeben werden
  • Button Commit schiebt die Änderungen ins Repository

Projekt aus dem Repository entfernen

Unter Umständen möchte man ein angelegtes Projekt wieder aus dem Repository entfernen. Dies ist ziemlich einfach, wenn man es weiß. Man braucht dazu nur den SVN-Konsolen-Client und führt folgenden Befehl aus:

 svn delete http://example.com/svn/zuloeschendesprojekt

Beim Ausführen wird ggf. der Nano-Editor geöffnet. Das ist nicht wichtig und kann mit "STRG+X" übersprungen werden. Anschließend wird man aufgefordert sich auf dem SVN-Server zu authentifizieren, sofern eine authentifizierte Anmeldung erforderlich ist.


Quellen

http://wiki.ubuntuusers.de/Subversion?redirect=no

http://www.abbeyworkshop.com/howto/misc/svn01/