AD Teaching Wiki:

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.

Hochladen der Dateien für ein neues Übungsblatt

1. Für jedes neue Übungsblatt legen Sie bitte einen eigenen Unterordner an, etwa

mkdir uebungsblatt-1
svn add uebungsblatt-1
svn commit

Äquivalent dazu geht auch

svn mkdir uebungsblatt-1
svn commit

Nach jedem svn commit öffnet sich ein Editor. Dort sollen Sie knapp und präzise beschreiben, welche Änderung am SVN Sie soeben vornehmen. Für das Beispiel oben etwa: Added new subfolder for exercise sheet 1. Speichern Sie diese Nachricht und verlassen Sie den Editor. Im Anschluss wird die gewünschte Änderung am SVN vorgenommen.

Welcher Editor sich öffnet hängt von der Konfiguration Ihres Systems ab. Wenn Sie möchten, dass SVN beim commit einen bestimmten Editor öffnet, können Sie das durch Setzen der Umgebungsvariablen SVN_EDITOR herbeiführen. Zum Beispiel (vorausgesetzt es gibt den Editor Vim auf Ihrem System, und er steht unter /usr/bin/vim):

export SVN_EDITOR=/usr/bin/vim

2. Um Ihre Code-Dateien und das Makefile für ein Übungsblatt hochzuladen, stellen Sie sicher, dass Sie in dem Unterordner sind und machen Sie dort

svn add Makefile PrimeMain.cpp PrimeTest.cpp 
svn commit Makefile PrimeMain.cpp PrimeTest.cpp

Wenn Sie sicher sind, dass sie *alle* Verzeichniss in dem Ordner hochladen wollen (das ist nach make clean in der Regel der Fall, aber vergewissern Sie sich selber durch ein anschließendes ls -l), können Sie auch machen

svn add *
svn commit

Das wird aber nur funktionieren, wenn Sie den Ordner, in dem sich diese Dateien befinden bereits wie unter 1. beschrieben hochgeladen haben! Sonst kommt eine der folgenden beiden Fehlermeldungen. Wenn Sie für den Order, in dem sich die beiden Dateien befinden, nicht mal svn add bzw. svn mkdir gemacht haben, kommt:

svn: '.' ist not a working copy.

Wenn Sie für den Ordner, in dem sich die beiden Dateien befinden, svn add bzw. svn mkdir gemacht haben, aber noch kein svn commit, dann kommt so etwas wie:

svn: '/.../uebungsblatt-1' is not under version control and is not part of the commit, yet its child '/.../uebungsblatt-1/<file name>' is part of the commit

Gehen Sie in beiden Fällen in den Ordner um dem es geht (im Beispiel: uebungsblatt-1) und machen Sie dort

svn add -N uebungsblatt-1
svn commit uebungsblatt-1

Das -N steht hier für non-recursive und ist wichtig, damit Sie nur den Ordner und nicht irgendwelche Dateien darin hinzufügen (die Sie entweder weiter oben schon hinzugefügt haben, oder gar nicht hinzufügen wollen). Bei dem commit in der zweiten Zeile auch unbedingt den Namen des Verzeichnisses mit angeben, damit Sie in diesem Schritt nur das neue Verzeichnis hochladen und noch nichts von seinem Inhalt. Nach dem Hochladen gehen Sie wieder in den Ordner und machen noch einmal svn commit.

OLD STUFF

Um neue Dateien, die vorher noch nicht in unserem SVN waren,

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:

mkdir MYFOLDER
svn checkout http://ad-svn.informatik.uni-freiburg.de/teaching/cplusplus-ss2010/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". Das eigentliche Hochladen passiert dann 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 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: ProgrammierenCplusplusSS2012/SVN (last edited 2012-05-14 21:03:39 by Hannah Bast)