welcome: please sign in
location: SubVersion

Subversion?

Subversion ist, wie CVS ein Versionsverwaltungssystem. Da CVS einige Nachteile hat, haben es sich Entwickler zum Ziel gesetzt in SVN einen würdigen Nachfolger zu schaffen.

Im Gegensatz zu CVS kann SVN z.B. mit Binärdateien umgehen, man kann Files im Repository umbenennen etc ..

http://subversion.tigris.org/

Funktionsweise

Sehen wir uns mal kurz an wie das ganze Funktioniert und welche Methoden uns bereitstehen ein SVN anzusprechen.

Zu allererst erstellen wir ein SVN Repository:

abi@erde:~> svnadmin create svn/

Nun befindet sich in /home/abi ein Directory "svn/" mit den folgenden Inhalten:

drwxr-xr-x    7 abi      users        4096 Feb 25 09:50 .
drwx------   50 abi      users        4096 Feb 25 09:50 ..
-rw-r--r--    1 abi      users         376 Feb 25 09:50 README.txt
drwxr-xr-x    2 abi      users        4096 Feb 25 09:50 conf
drwxr-xr-x    2 abi      users        4096 Feb 25 09:50 dav
drwxr-xr-x    2 abi      users        4096 Feb 25 09:50 db
-rw-r--r--    1 abi      users           2 Feb 25 09:50 format
drwxr-xr-x    2 abi      users        4096 Feb 25 09:50 hooks
drwxr-xr-x    2 abi      users        4096 Feb 25 09:50 locks

Das einzige Verzeichnis das uns hier später noch interessiert ist conf/ und die sich darin befindende svnserve.conf.

Man hat mehrere Möglichkeiten auf das SVN Repository zuzugreifen:

Unser erster Befehl

abi@erde:~$ svn help

zeigt wie bei CVS eine Liste von Befehlen an die der SVN Client entgegennimmt. Mit einem Commando ala:

abi@erde:~$ svn help add

kann man sich die Hilfe zu dem jeweiligen Kommando ansehen.

Erste Schritte

Wir wollen nun also dieses SVN Repository über die "file://" Methode ansprechen. Dazu importieren wir eine kleine Datei nach ~/svn/projekt1/:

abi@erde:~$ mkdir meinprojekt
abi@erde:~$ touch meinprojekt/test.c
abi@erde:~$ svn import meinprojekt file:///home/abi/svn/projekt1
Adding         meinprojekt/test.c

Committed revision 2.

(der svn client ruft hier den in SVN_EDITOR oder EDITOR definierten Editor auf, will man das verhindern, kann man wie bei CVS die Option -m "foo" zum hinzfügen eines Logeintrages verwenden)

Sehen wir uns also nun einmal an wie unser SVN Repository aufgebaut ist, das können wir mittels "svnlook":

abi@erde:~$ svnlook tree svn/
/
 projekt1/
  test.c

Der nächste schritt: einen Checkout

abi@erde:~$ svn co file:///home/abi/svn/projekt1
A  projekt1/test.c
Checked out revision 2.

und einen commit:

abi@erde:~$ cd projekt1/
abi@erde:~/projekt1$ echo "foo" >> test.c 
abi@erde:~/projekt1$ svn commit -m "foo"
Sending        test.c
Transmitting file data .
Committed revision 3.

Nun können wir wieder svnlook verwenden um uns die Änderungen anzusehen:

abi@erde:~$ svnlook diff svn/
Modified: projekt1/test.c
===================================================================
--- projekt1/test.c     2004-02-25 09:02:02 UTC (rev 2)
+++ projekt1/test.c     2004-02-25 09:08:05 UTC (rev 3)
@@ -0,0 +1 @@
+foo

Die obigen Befehle lassen sich fast ganz auf die "svn+ssh://" Methode übertragen, voraussgesetzt, man besitzt einen SSH Zugang auf der Maschine:

abi@erde:~$ svn co svn+ssh://localhost/home/abi/svn/projekt1         
abi@localhost's password: 
A  projekt1/test.c
Checked out revision 3.

..und ein commit:

abi@erde:~$ cd projekt1/
abi@erde:~/projekt1$ echo "foo2" >> test.c 
abi@erde:~/projekt1$ svn commit -m "foo2"
abi@localhost's password: 
Sending        test.c
Transmitting file data .
Committed revision 4.

Will man nun das normale SVN Protokoll verwenden, so muss man einen Subversion-Server aufsetzen, was aber gar nicht mal so Tragisch ist:

Man editiere ~/svn/conf/svnserve.conf folgendermassen:

[general]
anon-access = none
auth-access = write
password-db = passwd
realm = My First Repository

und erstelle in ~/conf/ ein file "passwd", welches so aussehen könnte:

[users]
abi = geheim

und nun den SVN Server mittels "svnserve" starten:

abi@erde:~$ svnserve -d --root /home/abi/

und ausprobieren:

abi@erde:~$ svn co svn://localhost/svn/projekt1
Authentication realm: <svn://localhost:3690> My First Repository
Password for 'abi': 
A  projekt1/test.c
Checked out revision 4.

.. ein Commit:

abi@erde:~$ cd projekt1/
abi@erde:~/projekt1$ echo "foo3"> test.c 
abi@erde:~/projekt1$ svn commit -m "foo3"
Sending        test.c
Transmitting file data .
Committed revision 5.

Sehr ausführliches Dokument zur Versionsverwaltung mit SVN: http://svnbook.red-bean.com/html-chunk/index.html

SubVersion (last edited 2008-07-14 09:55:46 by localhost)