Subversion Benutzerdokumentation

Inhalt des Dokuments

Allgemeines

Subversion ist ein Version Control System ähnlich CVS.
Die offizielle Projekthomepage ist http://subversion.apache.org.
Ausführliche Dokumentation (SVN-Book): http://svnbook.red-bean.com

Auf der Client-Seite ist Subversion sehr stark an die CVS-Syntax angelehnt. Lediglich auf der Server-Seite ergeben sich einige Unterschiede, wie der Einsatz der BerkeleyDB etc.

Subversion kann an sich viele verschiedene Protokolle, wie svn://, svn+ssh://, http:// und https://, was dem Endanwender jedoch fast komplett verborgen bleibt. Meistens unterscheiden sich auf Benutzerebene die Protokolle nur durch die verschiedenen URLs.

Die Protokolle

Auf der svn46.informatik.tu-muenchen.de wird momentan lediglich https als Protokoll unterstützt. Deshalb verwendet dieses Tutorial ausschließlich dieses Protokoll.

Zusätzlich gäbe es noch file:// svn:// svn+ssh:// http://. Diese sind jedoch auf der svn46 deaktiviert.

Arbeiten mit Repositories

Der Arbeitsablauf bei Subversion-Repositories ist sehr ähnlich zur Arbeit mit CVS-Repositories. Man erstellt zunächst mit checkout eine lokale Kopie des Repositories, mit der man dann arbeitet. Zu dieser Kopie können dann etwa mit add Dateien hinzugefügt werden. Ist man mit der Arbeit am Repository fertig, so überträgt man mit commit die Änderungen an den Server, und macht sie somit den anderen Usern zugänglich. Mit dem commit-Befehl wird dann eine neue Revision erzeugt. D.h. unter der vorigen Revisionsnummer ist immer noch die alte Version des Repositories verfügbar.

Der Subversion-Client

svn

Der Kommandozeilen-Client svn stellt die gesamte Funktionalität bereit, die zum Arbeiten mit Subversion benötigt wird.
svn help

zeigt Liste aller Befehle

svn help <Befehl>

zeigt Erklärung und Parameter eines Befehls

svn add <FileName>

fügt Datei zum Repository hinzu

svn cat <FileName>

zeigt Inhalt der Datei im Repository bzw. an der URL

svn checkout <RepositoryURL> [<LocalPath>] (Abk.: co)

checkt das Repository aus

svn commit Abk.: ci

überträgt die Änderungen am Repository an den Server

svn copy <DirOrFilename> <NewDirOrFilename> (Abk.: cp)

kopiert eine Datei oder ein Verzeichnis im Repository

svn delete <FileName> (Abk.: del, remove, rm)

löscht Datei aus Repository

svn export <RepositoryName> <Path>

erzeugt eine 'saubere' Kopie der aktuellen bzw. der angegebenen Revision des Repositories (nur Verzeichnisse und Dateien, keine Versioning-Informationen)

svn import <LocalDir> <RepositoryURL>

importiert lokale(s) Verzeichnis/Datei in ein Repository (als Argument muss die RepositoryURL angegeben werden, nicht nur eine lokale Working-Copy)

svn list <RepositoryPath> Abk.: ls

zeigt den Directory-Inhalt

svn log <FileOrDIrName>

zeigt die Log-Messages zu einer Datei an (übergibt man nur ein Repository, so werden alle Log-Messages des Repositories angezeigt)

svn mkdir <DirName>

erzeugt ein neues Directory im Repository, und added es gleich

svn move <FileName> <NewFileName> Abk.: mv, rename, ren

verschiebt eine Datei/Verzeichnis innerhalb eines Repositories

svn update (Abk.: up)

lokale Working-Copy auf den neuesten Stand bringen

Bei manchen Befehlen (z.B. export) kann explizit die Revisionsnummer angegeben werden, mit der gearbeitet werden soll. Dies ist nur dann notwendig, wenn man nicht mit der aktuellsten Revision arbeiten möchte. Dies geschieht durch den Parameter:
--revision <RevisionsNr> (Abk.: -r <RevisionsNr>)

Notwendige Schritte zum Bearbeiten eines Repositories

  1. auschecken bzw. updaten einer lokalen 'Working-Copy' des Repositories

  2. Änderungen durchführen, z.B.:

  3. Änderungen an Server übertragen

    svn commit <RepositoryName>

Konkretes Beispiel siehe hier

Angeben des richtigen Repositories

Befindet man sich nicht gerade im Verzeichnis der Working-Copy, die man committen etc will, so muss man als zusätzlichen Parameter noch den Pfad der Working-Copy angeben:

cd ~
mkdir testdir
svn co https://svn46.informatik.tu-muenchen.de/reposi testdir/reposi
echo "test" > testdir/reposi/testfile
svn add testdir/reposi/testfile

dann wäre

svn commit testdir/reposi

das gleiche wie

cd testdir/reposi
svn commit

Browsen des Repositories

Man kann auch die aktuellste Revision des Repositories mit dem Browser betrachten. Hierfür einfach fogende URL aufrufen:

https://svn46.informatik.tu-muenchen.de/<RepositoryName>

Authentifizierung

Prinzipiell können alle svn-Operationen die Authentifizierung benötigen mit dem Parameter --username <UserName> umgehen. Wird der gesetzt, so wird nicht der aktuelle System-Login des Benutzers, sondern gleich der Name <UserName> als Login übermittelt.
Wenn man den Parameter --username <UserName> nicht angibt, so schickt der Client zunächst den System-Login als Usernamen. Drückt man bei der folgenden Passwortabfrage einfach ENTER, so kann man einen neuen Usernamen eingeben.

Beispiele

  1. Exemplarischer Checkout, Modifikation des Repositories (hinzufügen eines Verzeichnisses und von zwei Dateien), und Committen der Änderungen.
    (Server: svn46.informatik.tu-muenchen.de; Protokoll: https; Repository: test2; Username/Passwort: test)

    
    macbroy24:~ [1]
    :) cd svn/
    macbroy24:~/svn [2]
    :) svn checkout https://svn46.informatik.tu-muenchen.de/test2 --username test
    
    [ ... ]
    
    (R)eject or accept (t)emporarily? t
    Authentication realm: <https://svn46.informatik.tu-muenchen.de:443> Rpository requires a Password...
    Password for 'test':
    Checked out revision 0.
    macbroy24:~/svn [3]
    :) svn mkdir test2/newdir
    A         test2/newdir
    macbroy24:~/svn [4]
    :) vim test2/newdir/file1
    macbroy24:~/svn [5]
    :) vim test2/newdir/file2
    macbroy24:~/svn [6]
    :) svn add test2/newdir/*
    A         test2/newdir/file1
    A         test2/newdir/file2
    macbroy24:~/svn [7]
    :) svn commit test2
    
    [ ... ]
    
    (R)eject or accept (t)emporarily? t
    Authentication realm: <https://svn46.informatik.tu-muenchen.de:443> Rpository requires a Password...
    Password for 'userName':
    Authentication realm: <https://svn46.informatik.tu-muenchen.de:443> Rpository requires a Password...
    Username: test
    Password for 'test':
    Adding         test2/newdir
    Adding         test2/newdir/file1
    Adding         test2/newdir/file2
    Transmitting file data ..
    Committed revision 1.
    macbroy24:~/svn [8]
    :)

    Andere User können dann mit

    svn update test2

    Ihr lokales Repository (das sie davor schon mal ausgecheckt hatten) aktualisieren.