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 ..
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:
file:// (Lokal)
- svn:// (Über das SVN Protokoll, benötigt einen svnserve (wie pserver bei CVS)
svn+ssh:// (SVN über SSH)
http:// (SVN über HTTP (webdav etc..))
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.
Links
Sehr ausführliches Dokument zur Versionsverwaltung mit SVN: http://svnbook.red-bean.com/html-chunk/index.html