AD Teaching Wiki:

Subversion (SVN)

SVN ist ein Versionsmanagementsystem. Es verwaltet beliebige Daten (meistens jedoch so etwas wie Text oder Programmcode) auf einem zentralen Rechner (in unserem Fall ein Rechner bei uns am Lehrstuhl) in einem sogenannten Repository. Sie können sich Ihre Dateien von diesem Rechner holen (svn checkout), sie können neue Dateien hinzufügen (svn add), und den Inhalt von neuen oder geänderten Dateien in das Repository hochladen (svn commit). Wenn jemand anderes etwas an Ihren Daten ändert (in unserem Fall die Tutoren die Ihre Programm korrigieren) bekommen Sie die neueste Version mit svn update.

svn checkout

Wir haben für diese Vorlesung ein eigenes SVN repository. Darin hat jeder Teilnehmer und jede Teilnehmerin ein Unterverzeichnis. Der Name dieses Unterverzeichnisses ist genau der Name ihres RZ-Accounts. Zum Auschecken Ihres Unterverzeichnisses machen Sie folgendes (unter Unix / Linux), wobei MYUSERNAME der Benutzername Ihres RZ-Accounts ist und MYFOLDER ein Verzeichnis Ihrer Wahl:

svn checkout https://daphne.informatik.uni-freiburg.de/svn/ProgrammierenCplusplusSS2014/MYUSERNAME MYFOLDER --username MYUSERNAME

svn add

Um eine Datei FILE die bisher noch nicht im Repository war, diesem hinzuzufügen, macht man

svn add FILE

Es wird durch dieses Kommando allerdings noch nichts auf den Server hochgeladen, sondern die betreffenden Dateien werden für das Hochladen "gescheduled" (markiert). Das eigentliche Hochladen passiert beim nächsten svn commit, siehe unten. svn add klappt auch mit mehreren Dateien gleichzeitig, zum Beispiel für FILE1, FILE2 und FILE3

svn add FILE1 FILE2 FILE3

Wenn einer der Dateien ein Ordner ist wird nicht nur der Ordner sondern gleich auch alle Dateien in diesem Ordern geadded. Wenn man das macht, sollte man aufpassen, dass auch wirklich alle Dateien in dem Ordner in das Repository sollen und irgendwelche "Nebenprodukte" wie Backup-Dateien vom Editory, .o Dateien oder ausführbare Dateien vorher löschen.

Wenn man eine Datei für die man schon svn add gemacht hat, doch nicht adden will macht man einfach svn revert gefolgt von dem oder den betreffenden Dateinamen.

svn commit

Mit diesen Befehl werde alle Änderungen an der lokalen Arbeitskopie auf den Rechner übertragen wo das Repository liegt. Also in unserem Fall, der Rechner an unserem Lehrstuhl. Änderungen sind dabei sowohl Änderungen an Dateien, die schon im Repository waren, als auch Dateien, die mit svn add erstmalig dem Repository hinzugefügt wurden.

svn commit schlägt fehl, wenn Dateien geändert werden sollen, welche in gesperrten Verzeichnissen liegen. Dies ist bei älteren Übungsblättern nach dem Ablauf der Abgabefrist der Fall.

svn update

Hiermit werden alle Änderungen im zentralen Repository auf Ihre Arbeitskopie übertragen. Wenn sich im Repository nichts geändert hat, passiert einfach nichts. Wenn sich im Repository etwas geändert hat an einer Datei an der sie zwischenzeitlich auch etwas geändert haben, versucht SVN diese beiden Änderungen zusammen zu bringen, das nennt sich merge. Wenn die Änderungen an verschiedenen Stellen in der Datei sind gelingt das meisten. Wenn die Änderungen an der gleichen Stelle in der Datei waren, gibt es einen sogenannten conflict.

Im Falle eines conflicts zeigt SVN für die betreffende Datei ein C an. Sie müssen die Datei dann editieren und den Konflikt beheben. Konkret sieht das so aus, dass in der Datei die Stellen mit dem Konflikt markiert sind (die Markierungen sind nicht zu übersehen). Es stehen dann beide Versionen da. Sie können sich dann überlegen was da stehen soll, die Datei entsprechend ändern und die Markierungen dann entfernen. Danach müssen Sie SVN explizit mitteilen, dass Sie sich um den conflict gekümmert haben und das geht mit svn resolved gefolgt von dem Namen der Datei.

svn help

Hiermit können alle verfügbaren Befehle für "svn" aufgelistet werden und weitere Informationen darüber abgefragt werden. Im Prinzip ersetzt dieser Befehl die Man-Pages für svn.

svn help

svn help add

AD Teaching Wiki: ProgrammierenCplusplusSS2014/SVN (last edited 2016-04-14 19:54:39 by Hannah Bast)