User Tools

Site Tools


Sidebar

Navigation

public:help:svn

SVN

Deprecation warning

Apache Subversion (SVN) isn't used anymore in the Enterprise Lab. Use Gitlab instead! Get help for migration from SVN to git.

Page Disambiguation

Hier finden Sie Informationen über die Verwendung von Subversion auf Ihrem Rechner, die verfügbaren Repositories des Enterprise Labs sowie einige Begriffserklärungen. Diese Seite beschränkt sich auf die lokale Arbeitskopie und beschreibt nicht das Erstellen oder Managen eines Repos auf dem Server.

Hier finden sie SVN "cheap sheet": subversion_quick_reference_card.pdf subversion-cheat-sheet-v1.pdf and for GIT user: git-svn-cheatsheet.pdf

Repos im EL

SVN Repositories im Enterprise Lab

Wir führen mehrere SVN Software Repositories, die mittels LDAP Authentifizierung geschützt sind:

Allgemeine Hinweise

Subversion ist eine Versionsverwaltung und keine Dateiablage! SVN sollte deshalb nur eingesetzt werden, wenn man zu versionierende Dokumente verwalten will. Dazu gehören u.a. Source Code oder selbst erstellte Dokumente. Keinesfalls sollten Bilder, EXE-Files, PDF, Filme oder Musik-Dateien ins SVN gelegt werden. Die verbrauchen nur unnötig Platz und lassen sich normalerweise nicht vernünftig versionieren.

Wenn man Verbindung zu einem Repo im Enterprise Lab aufnimmt, wird das erste Mal vermutlich eine Fehlermeldung erscheinen, dass etwas mit dem Zertifikat des Servers nicht stimmt. Das liegt daran, dass wir selbst-signierte Zertifikate verwenden, die der lokale Rechner natürlich nicht kennt. In diesem Fall bitte das Zertifikat akzeptieren.

SVN via Windows

Laden Sie TortoiseSVN von der Website http://tortoisesvn.net/downloads herunter. Im Download-Bereich gibt es sowohl Versionen für 32bit als auch 64bit Windows, dazu noch Sprachpakete für diverse Sprachen.

Die Anleitung zu TortoiseSVN findet man hier: http://tortoisesvn.net/docs/release/TortoiseSVN_de/index.html.

Funktionsübersicht

Der nachfolgende Teil ist ein Auszug aus http://tortoisesvn.net/docs/release/TortoiseSVN_de/tsvn-dug.html.

Folgende Voraussetzungen sollten erfüllt sein, um die Einführung verstehen/nachvollziehen zu können:

  • Sie haben TortoiseSVN bereits installiert.
  • Sie kennen sich mit Versionskontrollsystemen aus.
  • Sie kennen die Grundlagen von Subversion.
  • Sie haben einen SVN Server installiert und/oder haben Zugriff auf ein Subversion Projektarchiv (Repository).

Überlagerte Symbole

Übersicht der überlagerten Symbole im Windows Explorer:

Die angepassten Symbole treten in der lokalen Arbeitskopie (= working copy) ihres Projekts auf. Sie zeigen den Zustand, in dem sich eine Datei oder ein Ordner befindet. Nur der lokale Zustand wird angezeigt - ein grünes Häklein heisst nicht, dass es keine neuere Version im Repository gibt! Es zeigt nur an, ob noch Änderungen Ihrerseits ausstehend sind.

Kontextmenü

Alle Befehle von TortoiseSVN werden über das Kontextmenü des Windows Explorers aufgerufen. Die meisten sind direkt sichtbar, wenn Sie einen Rechtsklick auf eine Datei oder Ordner machen. Welche Befehle angezeigt werden, hängt davon ab, ob das angeklickte Objekt oder sein übergeordneter Ordner unter Versionskontrolle stehen oder nicht. Das TortoiseSVN Menü wird auch im Dateimenü des Explorers angezeigt.

Je nachdem, ob das deutsche Language Pack installiert ist oder nicht, sind die Befehle auf Englisch oder Deutsch.

Drag and Drop

Andere Befehle sind als "Ziehen und Ablegen"-Funktion vorhanden. Wenn Sie Dateien oder Ordner innerhalb einer Arbeitskopie Rechts-Ziehen oder wenn Sie eine nicht versionskontrollierte Datei in eine Arbeitskopie Rechts-Ziehen.

Checkout

Ein Checkout (= Auschecken) müssen Sie normalerweise nur einmal pro Projekt machen. Sie kopieren damit das gesamte Repo in Ihr lokales Verzeichnis, das fortan "Arbeitskopie" (working copy) genannt wird. Das müssen Sie selbst dann tun, wenn Sie ein neues Projekt anlegen und das Repo noch leer ist. Damit "verbinden" Sie den lokalen Ordner mit Ihrem Repo.

Erstellen Sie dazu ein neues Verzeichnis, z.B. "Projekte\MyProject". Klicken Sie mit der rechten Maustaste auf das Verzeichnis und wählen Sie "SVN Auschecken…". Ein Fenster öffnet sich, wo Sie den Pfad zu Ihrem Repo angeben müssen. Anschliessend OK drücken, Benutzername und Passwort eingeben, nochmals auf OK klicken und der Kopiervorgang beginnt.

Nun haben Sie eine lokale Arbeitskopie des Projekts, die sich unter Versionierung befindet und mit Ihrem Repo verbunden ist.

Arbeiten im Repo

Objekte editieren

Das können Sie wie gewohnt in Ihrem Lieblings-Programm machen… Nach den Änderungen müssen Sie neue Dateien & Ordner mit svn add der Versionierung hinzufügen und mit svn commit alle Änderungen ins Repo übertragen.

SVN Add

Neue Dateien und ganze Ordner können Sie über das Kontextmenü hinzufügen: Erstellen Sie die neue Datei / das neue Verzeichnis, rechtsklicken Sie darauf und wählen Sie Hinzufügen…. Damit signalisieren Sie SVN, dass diese Dateien/Ordner ebenfalls versioniert werden sollen.

Sie müssen Ihre Änderungen noch mit commit abschicken! (Siehe weiter unten.)

Objekte editieren

Wenn Sie eine Datei oder einen ganzen Ordner verschieben, umbenennen oder löschen wollen, dann müssen Sie dies unbedingt via TortoiseSVN machen. Wenn Sie das nicht tun, kriegen Sie später Probleme, weil Ihr Repository nicht mehr synchron ist mit ihrer working copy!

Zum Umbenennen/Verschieben/Löschen rechtsklicken Sie auf das zu ändernde Verzeichnis oder die Datei und wählen Sie den entsprechenden Menüpunkt unter "TortoiseSVN" aus, z.B. "Wechseln zu…", um ein Objekt zu verschieben.

Sie müssen Ihre Änderungen noch mit commit abschicken! (Siehe weiter unten.)

SVN Commit

Hat man Änderungen an der lokalen Arbeitskopie gemacht, sollte man diese regelmässig (z.B. jeweils am Abend) ins Repository übertragen. Dies geschieht mit dem Befehl "commit" oder zu deutsch "übertragen". Erst mit diesem Commit werden alle Änderungen ins Repo geschrieben und sind ab dann auch für alle anderen, die mit diesem Repo arbeiten, sichtbar. (Bei CVS hiess dieser Befehl früher "Check in".)

SVN Update

Um Ihre lokale Arbeitskopie aktuell zu halten, sollten Sie regelmässig (mind. jeden Morgen vor dem Weiterarbeiten) ein Update vom Repo herunterladen. Keine Angst, sollten Sie in der Zwischenzeit etwas geändert haben, wird Ihre lokale Kopie nicht einfach überschrieben. Dieses Aktualisieren kann auch mehrmals täglich geschehen, um immer aktuell zu bleiben.

Der Befehl dazu ist ebenfalls im Kontextmenü und heisst "SVN Aktualisieren" (resp. "SVN Update").

SVN Import

Hat man ein neues Repo und möchte den Inhalt eines bestehenden Ordners (der noch nicht unter SVN-Kontrolle steht) in dieses Repo "hineinladen", dann geht dies via dem Befehl "Import…". Manchmal wird das auch als "Checkin" bezeichnet. Nach dem Import gilt das lokale Verzeichnis aber nicht als "working copy"! Der Import wird normalerweise nur einmal - wenn überhaupt - zu Beginn verwendet. Auf keinen Fall sollte man ein bestehendes, aktives Repo fortwährend immer wieder mit Imports "füttern". Den Befehl "Import" finden Sie im Kontextmenü unter "TortoiseSVN >".

Achtung: Bitte nicht mit dem Befehl "Commit" verwechseln, der die Änderungen zurück ins Repo schreibt.

SVN Export

Benötigt man aus irgend einem Grund alle Daten aus einem Repo, aber ohne die .svn-Ordner, kann man diese mit einem "Export" einfach erhalten. Typischerweise ist das dann der Fall, wenn ein Projekt ausgeliefert werden soll und man dem Kunden auf dem ausgelieferten Datenträger nur eine bestimmte Version zur Verfügung stellen will - ohne Anbindung an das Repo. Diesen Befehl finden Sie ebenfalls im Kontextmenü unter "TortoiseSVN >".

SVN via CLI

Die selben Funktionen, die TortoiseSVN unter Windows bietet, findet man typischerweise auch in kommandozeilen-basierten SVN Clients. Mac OS X und Solaris bieten beispielsweise SVN Clients auf der Kommandozeile an.

Die Kommandos sind im nachfolgenden aufgelistet. Da die Befehle bereits unter "SVN via Windows" erklärt sind, stehen hier nur wenige Kommentare. Wir gehen davon aus, dass sich das Repo über die URL https://dev.enterpriselab.ch/repos/MeinProjekt ansprechen lässt und die lokale Arbeitskopie unter /home/testuser/MeinProjekt liegt. Das Projekt beinhaltet nur eine Datei namens "Hello.java".

Checkout

Wenn man neu beginnt und das Projektverzeichnis nicht existiert resp. man noch kein Checkout gemacht hat, muss man das Repo zuerst auschecken. Dazu müssen Sie zuerst in das Verzeichnis springen, wo die lokale Arbeitskopie schliesslich liegen soll.

$ cd /home/testuser/
$ svn co https://dev.enterpriselab.ch/repos/MeinProjekt 
  A    MeinProjekt/Hello.java

Nun haben Sie eine "working copy" auf Ihrem lokalen Filesystem. Ab jetzt können Sie mit SVN arbeiten!

Objekte editieren / erstellen

Neue Dateien und Ordner können Sie wie gewohnt erstellen und mit Ihren Lieblingsprogrammen bearbeiten. Nach dem Erstellen neuer Objekte müssen Sie diese mit SVN Add der Versionierung hinzufügen. Mit Commit müssen Sie sämtliche Änderungen (inkl. dem Hinzufügen neuer Dateien) ins Repo übertragen.

SVN Add

Wenn Sie eine neue Datei (oder einen neuen Ordner) erstellt haben, müssen Sie SVN mitteilen, dass die Datei (der Ordner) dem Repo hinzugefügt wurde:

$ svn add MeinProjekt/NewFile.java

Objekte alternieren

So lange Sie innerhalb einer lokalen "working copy" arbeiten, sollten Sie diese Operationen nicht mit den Befehlen des Filesystems machen (z.B. rm oder mv) sondern immer nur mit dem zugehörigen SVN-Kommando arbeiten:

$ svn delete MeinProjekt/NewFile.java
$ svn rename MeinProjekt/Hello.java MeinProjekt/HelloWorld.java

Hinweis: "svn rename" ist gleich bedeutend wie "svn move".

Hat man fälschlicherweise mit svn delete eine Datei gelöscht, kann man das wieder rückgängig machen:

$ svn revert MeinProjekt/NewFile.java

SVN Commit

Um alle Änderungen ins Repo zu übertragen, müssen Sie ein commit ausführen. Doch zuerst kontrollieren wir, welche Änderungen anstehen (Bsp.: "Hello.java" wurde modifiziert):

$ svn status
  M  Hello.java

Dann laden wir die Änderungen ins Repo hoch:

$ svn commit -m "Fixed Bug 1, 2 and 3"
Password:
  Sending  Hello.java
  Transmitting file data .
  Committed revision 2.

Hinweis: Mit -m kann ein Mitteilungstext für dieses "Commit" mitgegeben werden. Ausserdem kann man svn commit auch abkürzen mit svn co.

SVN Update

Ein Update bringt Ihre lokale Arbeitskopie auf den aktuellen Stand. Dazu müssen Sie erst in Ihr Projektverzeichnis wechseln:

$ cd /home/testuser/MeinProjekt
$ svn update

SVN Import

Gehen Sie eine Verzeichnis-Ebene nach "oben", d.h. raus aus Ihrem Projektverzeichnis. Dann können Sie den ganzen Ordner importieren. Das Repo, in das Sie importieren wollen, muss auf dem Server natürlich bereits existieren.

$ cd /home/testuser/
$ svn import MeinProjekt https://dev.enterpriselab.ch/repos/MeinProjekt -m "Created MyProject"

Hinweis: Mit -m kann ein Mitteilungstext für den Import mitgegeben werden.

Projekte / Dateien auflisten

So können Sie Ihre Projekte im Repo auflisten (-R listet auch die Dateien auf):

$ svn list -R -v https://dev.enterpriselab.ch/repos/MeinProjekt

Falls nötig, geben Sie Ihren Benutzernamen an mit –username testuser.

Konflikte auflösen

Falls Sie gleichzeitig mit anderen Personen eine Änderung an der selben Datei gemacht haben, meldet SVN einen Konflikt (entweder beim Update oder beim Commit). Mit svn status -u können wir Konflikte anzeigen lassen (Zeilen, die mit "C" beginnen).

$ svn status -u MeinProjekt

Bei einem Konflikt z.B. mit "Hello.java" gibt es zwei neue Dateien, die so oder ähnlich lauten: "Hello.java.r54", "Hello.java.r55" Die aktuelle Version (z.B. wenn "Hello.java.r55" der aktuellste Dateistand ist) über die bestehende Datei kopieren:

$ cp MeinProjekt/Hello.java.r55 MeinProjekt/Hello.java

Anschliessend bringen Sie die nötigen Änderungen zum Lösen des Konflikts an. Am Schluss teilen Sie SVN mit, dass der Konflikt gelöst wurde:

$ svn resolved MeinProjekt/Hello.java

Eine alte Revision erhalten

Zuerst sollten Sie die aktuelle Revisionsnummer herausfinden:

$ svn info MeinProjekt

Dann können Sie eine ältere Revision auswählen und in Ihre Arbeitskopie legen:

$ svn up --revision <old revision number> MeinProjekt

SVN Branch

Situation: Our Application is currently developed in: Myapp/trunk. The developer has made some releases an therefore made some snapshots in the ELogin/tags directory. Now we decided to let students work on parts of this application. Of corse, they're note allowed to edit in the "trunk" directory. I have to create a branch. This branch I will create from the latest "tag" eg. /ELogin/tags/1

create a brach server side (this is preferred over client side since the merge (which will happen one day) will be lot easier.

$ cd ELogin
$ svn copy https://dev.enterpriselab.ch/research/el.aai/tags/1.0 https://dev.enterpriselab.ch/research/el.aai/branches/admin_gui -m "Create a branch for adminGUI interface"

after that do a simple update.

Don't forget to edit the access serverside: svn server edit

Troubleshooting

Ignorieren

Build Verzeichnisse: Bei Entwicklungsprojekten sollten Build Verzeichnisse auf ignore gesetzt werden. Eine IDE löscht zum Beispiel das Build Verzeichnis und die ganze darunter liegende Struktur. Somit sind auch die .svn Directories weg. Subversion hat nun eine Inkonsistenz, die mühsam per Hand korrigiert werden muss. Dieses Missgeschick passiert bei jedem Build-Vorgang. Ein zeitraubendes Ärgernis!

OSX Umlaute Problem

Es kommt öfters vor, dass Dateinamen mit Umlauten dazu führen, dass eine Shell unter OSX behauptet, diese Datei existiere nicht. Abhilfe verschafft folgendes Statement:

$ export LC_CTYPE=de_DE.UTF-8

Weblinks

public/help/svn.txt · Last modified: 2019-07-10T07:33+0200 by 144.76.29.149