Inhalt des Dokuments
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.
Auf der svn46.informatik.tu-muenchen.de
wird momentan lediglich https
als Protokoll unterstützt. Deshalb verwendet dieses Tutorial ausschließlich dieses Protokoll.
file:// svn:// svn+ssh:// http://
. Diese sind jedoch auf der svn46
deaktiviert.
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 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>
)
auschecken bzw. updaten einer lokalen 'Working-Copy' des Repositories
normales Auschecken
svn checkout https://svn46.informatik.tu-muenchen.de/<RepositoryName>
updaten, wenn man schon lokale Working-Copy hat
svn update https://svn46.informatik.tu-muenchen.de/<RepositoryName>
Änderungen durchführen, z.B.:
Verzeichnisse erstellen
svn mkdir <RepositoryName>/<DIRName>
neu erstellte Dateien hinzufügen
svn add <RepositoryName>/<PfadZurDatei>/<DateiName>
Datei aus Repository löschen
svn delete <RepositoryName>/<PfadZurDatei>/<DateiName>
Änderungen an Server übertragen
svn commit <RepositoryName>
Konkretes Beispiel siehe hier
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
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>
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.
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.