Prinzipielles zur Benutzung von Versionskontrollsystemen



Ähnliche Dokumente
Kurzanleitung zu. von Daniel Jettka

Versionsverwaltung mit SVN

Wie benutzt man TortoiseSVN

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Wie halte ich Ordnung auf meiner Festplatte?

Anleitung über den Umgang mit Schildern

Bilder zum Upload verkleinern

FS cs108 Programmierpraktikum Subversion. Lukas Beck Cedric Geissmann Alexander Stiemer

Datensicherung. Beschreibung der Datensicherung

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Die Dateiablage Der Weg zur Dateiablage

Arbeiten mit dem Outlook Add-In

Fülle das erste Bild "Erforderliche Information für das Google-Konto" vollständig aus und auch das nachfolgende Bild.

Einfu hrung in Subversion mit TortoiseSVN

Inkrementelles Backup

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

QTTabBar Einrichtung, ein Tutorial

Beheben von verlorenen Verknüpfungen

Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software

Speichern. Speichern unter

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

Kleines Handbuch zur Fotogalerie der Pixel AG

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

Erzherzog Johann Jahr 2009

Eigenen Farbverlauf erstellen

Informatik I Tutorial

Einführung in Subversion

Speicher in der Cloud

Informationen zur Verwendung von Visual Studio und cmake

Handbuch B4000+ Preset Manager

Dateimanagement in Moodle Eine Schritt-für

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11

Apache Subversion (SVN)

Mediator 9 - Lernprogramm

Einfügen von Bildern innerhalb eines Beitrages

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Fotostammtisch-Schaumburg

Informatik 1 Tutorial

Enigmail Konfiguration

FTP-Server einrichten mit automatischem Datenupload für

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar ZID Dezentrale Systeme

! " # $ " % & Nicki Wruck worldwidewruck

WinCVS Version 1.3. Voraussetzung. Frank Grimm Mario Rasser

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Artikel Schnittstelle über CSV

Wo möchten Sie die MIZ-Dokumente (aufbereitete Medikamentenlisten) einsehen?

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Kalenderfunktion in Open-Xchange richtig nutzen (PC-Support)

Anleitung zur Webservice Entwicklung unter Eclipse

Elexis-BlueEvidence-Connector

Windows 7 Winbuilder USB Stick

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Diese Anleitung zeigt dir, wie du eine Einladung mit Microsoft Word gestalten kannst.

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

Installation von Updates

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Die Formatierungsregeln (die so genannte Wiki-Syntax) für Texte in DokuWiki sind zu großen Teilen die selben, wie in anderen Wiki-Systemen.

DOKUMENTATION VOGELZUCHT 2015 PLUS

Internet online Update (Internet Explorer)

Datensicherung EBV für Mehrplatz Installationen

Software Engineering in der Praxis

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

OP-LOG

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

Arbeiten mit dem neuen WU Fileshare unter Windows 7

Erstellen von x-y-diagrammen in OpenOffice.calc

Win 7 optimieren. Unser Thema heute: Meine erstellten Daten in eine andere Partition verschieben.

Starten der Software unter Windows 7

SAMMEL DEINE IDENTITÄTEN::: NINA FRANK :: :: WINTERSEMESTER 08 09

Kapitel 3 Frames Seite 1

Sie finden im Folgenden drei Anleitungen, wie Sie sich mit dem Server der Schule verbinden können:

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Ein Leitfaden für Anfänger unter Zuhilfenahme frei verfügbarer Software! (bei z.b. Google Microsoft Powertoys suchen, oder diesen Link verwenden )

Fotos in Tobii Communicator verwenden

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me

Informationen zum neuen Studmail häufige Fragen

Um in das Administrationsmenü zu gelangen ruft Ihr Eure Seite auf mit dem Zusatz?mod=admin :

Um dies zu tun, öffnen Sie in den Systemeinstellungen das Kontrollfeld "Sharing". Auf dem Bildschirm sollte folgendes Fenster erscheinen:

TYPO3-Zusatzkurs für

Thunderbird herunterladen, Installieren und einrichten Version (portable)

Sie werden sehen, dass Sie für uns nur noch den direkten PDF-Export benötigen. Warum?

Inhaltserzeichnis. Datenübernahme

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Dateien löschen und wiederherstellen

Bilder verkleinert per versenden mit Windows XP

Tutorial Speichern. Jacqueline Roos - Riedstrasse 14, 8908 Hedingen, jroos@hispeed.ch -

Erklärung zum Internet-Bestellschein

Arbeiten mit MozBackup

Ebenenmasken Grundlagen

Transkript:

SVN How-To Fragen, Anregungen oder Vorschläge an Jochen. SVN testen Wer erstmal ein bisschen mit Subversion rumspielen will, der kann sich ein lokales Repository anlegen. Wie das geht steht hier: http://www.codeproject.com/kb/winsdk/subversiononwindows.aspx (Ist zwar für Windows geschrieben, funktioniert aber für andere Betriebssysteme ganz genau so einfach die entsprechenden Binaries downloaden und die Pfade austauschen.) Zur Notation Bei den Anweisungen steht in Anführungszeichen ( ) der Eintrag aus einem Menü in Eclipse (wenn nicht dabei steht welches Menü, dann ist das Team Menü gemeint) und hinten dran steht in eckigen Klammern ([]) der entsprechende SVN Kommandozeilen Befehl. Prinzipielles zur Benutzung von Versionskontrollsystemen Versionskontrollsysteme dienen dazu alle Änderungen, die an einem Projekt gemacht werden, mitzuprotokollieren und die Änderungen unterschiedlicher Entwickler zusammen zu führen. Beispiel: Entwickler A ändert Zeile 17 in Datei 1 und Entwickler B ändert Zeile 19 in Datei 1 und SVN erkennt wer was wo geändert hat und fügt beide Änderungen zusammen. Oder: Entwickler A ändert etwas an Datei 2 und lädt die Datei auf den SVN Server. Dann merkt aber irgendwer, dass die Änderungen Blödsinn waren. Dann kann man SVN anweisen eine vorherige Version der Datei wiederherzustellen. Die Arbeitweise mit SVN ist die folgende: Man holt sich ein Abbild des Projektes vom SVN Server (die so genannte Working Copy). Dann arbeitet man an dem Projekt und wenn man fertig ist, dann lädt man seine Working Copy wieder auf den SVN Server hoch, damit die anderen Entwickler Zugriff auf die neue Version haben. Wenn man längere Zeit am Stück arbeitet, sollte man aber auch zwischen durch immer mal wieder seine Working Copy hoch laden um einerseits die Daten auf dem Server zu sichern und um die Änderungen auch teilweise rückgängig machen zu können und andererseits damit es nicht passieren kann, dass zwei Entwickler gleichzeitig an der selben Sache arbeiten und erst Stunden später merken, dass ein anderer das selbe geschrieben hat und damit die Arbeit des einen umsonst ist. Ein Problem, dass dadurch entsteht ist: Entwickler A ändert Zeile 5 in Datei 3 und Entwickler B ändert ebenfalls Zeile 5 in Datei 3. Entwickler A lädt seine Version der Datei hoch und wenn Entwickler B seine Version der Datei hoch laden will kann SVN nicht entscheiden wie die endgültige Version der Datei aussehen soll, da beide Entwickler die gleiche Zeile geändert haben. Dieses Problem nennt man einen Konflikt und dieser muss per Hand aufgelöst werden (im Beispiel von Entwickler B). Beim Auflösen des Konflikts muss Entwickler B entscheiden, ob der seine eigenen Änderungen verwirft und die Änderungen von Entwickler A übernimmt oder die Änderungen von Entwickler A verwirft und seine Änderungen übernimmt oder ob er beide Änderungen vereinen kann. In jedem Fall entscheidet Entwickler B darüber wie die endgültige Version der Datei aussieht. Hat er den Konflikt gelöst, so enthält seine Working Copy die endgültige Version und er kann diese auf den SVN Server hoch laden.

Subclipse (SVN in Eclipse) SVN findet sich in Eclipse im Team-Menü - Rechtsklick auf eine Datei/einen Ordner/ein Projekt: SVN Repository hinzufügen und den Trunk auschecken / sich eine Working Copy holen Dies muss man nur ein Mal machen um die Dateien auf seinen Rechner zu holen. Sind die Dateien auf dem Rechner durchläuft man nur noch den Normalen Arbeitsablauf. 1.) Window Open Perspective SVN Repository Exploring (Unter Umständen muss man erst auf Other klicken) 2.) Rechtklick in das SVN Repository Register auf der linken Seite New Repository Location 3.) URL eingeben 4.) OK klicken 5.) Rechtsklick auf den Teil des Repositories, an dem man Arbeiten möchte Checkout [svn checkout]

6.) Check out as a project configured using the New Project Wizard um neues Projekt zu erstellen oder die zweite Option um es in ein bereits bestehendes Projekt einzufügen 7.) Finish klicken 8.) Einstellungen für das Projekt vornehmen (diese Einstellungen sind lokal, d.h. sie werden nicht auf den SVN Server hochgeladen) Normaler Arbeitsablauf Wichtig ist: Vor jedem Commit sollte ein Update ausgeführt werden (Commit funktioniert im Falle eines Konfliktes aber sowieso nicht, d.h. man macht nichts kaputt, wenn man es vergisst). 1.) Update [svn update] 2.) Arbeiten 3.) Update [svn update] Bei einem Konflikt werden jetzt 3 Dateien erstellt: eine *.mine, eine *.rxxx und eine *.ryyy. Die *.mine ist die Datei wie ihr sie commiten wolltet. Die beiden anderen Dateien sind die aktuelle Revision vom SVN (HEAD) und die Revision vorher. Die Dateien 4.) Wenn Konflikt, dann für jede Datei mit Konflikt Edit conflicts Es öffnet sich dann der so genannte Diff-View. Auf der linken Seite sieht man die Datei, wie sie nach Abschluss des Auflösens aussieht und auf der rechten Seite sieht man die aktuelle Revision vom SVN. Zu Beginn ist die linke Seite identisch mit eurer Datei. Als erstes kann man getrost den Copy all Non-Conflicting Changes From Right to Left Button drücken (oben rechts in der Ecke). Danach geht man alle conflicting Changes (rot) durch und kann dann entweder den Copy current Change from Right to Left Button benutzen (vorher die Zeile mit dem Konflikt markieren) oder wenn einem dieser Vorschlag nicht gefällt einfach die linke Seite per Hand ändern. Wenn alle Konflikte aufgelöst sind File Save. 5.) Für jede Datei mit aufgelösten Konflikten Mark Resolved Die restlichen Schritte entfallen, wenn man alle eigenen Änderungen mit denen vom Server überschrieben hat. 6.) Commit [svn commit] 7.) Kommentar eingeben 8.) Dateien auswählen, die hoch geladen werden sollen 9.) OK klicken Achtung: Leider gibt es noch eine kleine Falle bei Subversion: Subversion hat kein echtes Renaming, d.h. wenn man eine Datei umbenennt, dann erstellt Subversion eine neue Datei mit dem neuen Dateinamen (newfile.txt) und löscht die alte Datei (oldfile.txt). Problem dabei: Arbeitet jemand gleichzeitig an der Datei oldfile.txt, so erkennt Subversion nicht, dass die Änderungen in die neue Datei newfile.txt übernommen werden müssten, da dies (für SVN) eine unabhängige Datei ist. Stattdessen will SVN die Datei oldfile.txt als neue Datei hinzufügen (für SVN sieht es so aus als wäre die Datei neu hinzugefügt worden, da die ursprüngliche oldfile.txt gelöscht wurde). Wenn also eine Datei nach dem Updaten als neu hinzugefügt angezeigt wird, obwohl sie eigentlich nicht neu ist, dann am besten im Log nachschauen, ob jemand eine Umbenennung vorgenommen hat und dann per Hand die Änderungen in die Datei mit dem neuen Dateinamen übernehmen. Noch ein Hinweis zu Dateinamen: Windows hat ein case-insensitive filesystem. Deshalb dürfen sich Dateien nicht nur in der Groß- und Kleinschreibung unterscheiden sonst gibt s Probleme mit dem Update! (Beispiel: myfile.cpp = myfile.cpp bei Windows)

Kommentare Die Kommentare beim SVN Commit sollten einfach nur beschreiben was man wo gemacht hat. Man sollte also den Ort der Änderung in Form von Namespace::Klasse::Methode bzw. einfach nur Namespace::Klasse angeben und dann was man gemacht hat. Idealerweise erstellt man während dem Arbeiten bereits die Logmessages in einer Textdatei. So stellt man sicher, dass man keine Änderung vergisst und erhält Logmessages anhand derer man direkt aus dem SVN erkennen kann, was in einer Revision genau geändert wurde. Dies ist besonders hilfreich, wenn man eine bestimmte Änderung rückgängig machen will. Dann findet man diese Änderung nämlich bereits mit Hilfe der Logmessages und muss nicht die Dateien durchsehen. Wenn man die SVN Kommandozeilenbefehle benutzt kann man die Logdateien sogar beim Commit direkt mit angeben. Subclipse unterstützt dass leider nicht good old copy+paste muss herhalten. Hier ein paar Vorschläge, wie gängige Kommentare aussehen könnten: Namespace::Klasse::Methode created/removed Namespace::Klasse::Methode bugfix (TracID: XXX) Namespace ported RXXX from trunk Namespace merged branch mybranch into trunk Namespace::Klasse::Methode renamed to NewMethodName Namespace::Klasse::Methode renamed parameter myparameter to mynewparameter somefile.cpp renamed to newfilename.cpp /branches/mybranch created branch from trunk Namespace::Klasse::Methode resolved conflicts with rxxx Änderungen Rückgängig machen Wenn man feststellt, dass irgendwelche Änderungen, die man gemacht hat falsch waren, dann kann man mit Revert die Änderungen wieder rückgängig machen. Allerdings wird immer die komplette Datei wiederhergestellt, d.h. alle lokalen Änderungen an der Datei werden rückgängig gemacht. SVN Repository Struktur root trunk graphics physics sound core data maps items units ai logic branches graphics graphics_feature1_test graphics_feature2_test physics physics_feature1_test sound core data ai

logic release_candidate (nur bugfixes) tags alpha beta gold Was sind Branches/Tags/Trunk? Branches sind nebenläufige Entwicklungszweige, d.h. wenn man z.b. einen Teil der Software komplett umgestaltet oder eine experimentelles Feature einbauen will, aber andere Programmierer trotzdem weiterhin eine lauffähige Version der Software haben sollen um an anderen Teilen der Software weiter zu arbeiten, dann erstellt man einen Branch. SVN erstellt dann eine Kopie des Trunks, d.h. der aktuellen Hauptentwicklungslinie, und man entwickelt dann mit diesem Branch, statt mit dem Trunk (man kann auch Branches von Branches erstellen oder sogar aus verschiedenen Revisionen einen Branch zusammen stellen, dass aber nur am Rande). Der Branch ist dann praktisch unabhängig und kann als eine Art eigenes Projekt betrachtet werden. Hat man seine Arbeit am Branch abgeschlossen so führt man die Änderungen in den Trunk ein und mit einem Commit ist das neue Feature integriert. Im Konzept von SVN sind Branches und Tags das gleiche. In anderen Versionskontrollsystemen sind Tags praktisch Backups, d.h. man erstellt eine Kopie einer gewissen Revision (=Version der Entwicklung) und diese Kopie kann nicht mehr verändert werden. In SVN wird so was einfach dadurch realisiert, dass man einen Branch erstellt und diesen nicht mehr verändert oder z.b. nur noch Bugfix Änderungen zulässt. So kann man z.b. Stable / Release Versionen realisieren (Branch Release X.X erstellen und nur noch Bugfixes zulassen). Einen Branch erstellen 1.) Ordner erstellen (Rechtsklick wohin der Ordner soll -> New -> Folder), Name des Ordners = Name des Branches Wichtig: SVN kann immer nur den letzten Ordner in der Hierarchie gleich beim entsprechenden Befehl erstellen, d.h. svn copy http://svn.my-svn-server.com/trunk http://svn.my-svn-server.com/branches/xy_test funktioniert nur, wenn der Ordner branches bereits existiert. Der Ordner xy_test muss allerdings nicht existieren. 2.) Branch/Tag [svn copy] 3.) Revision auswählen (in der Regel HEAD, d.h. aktuelle Revision) 4.) Zielordner eingeben/auswählen 5.) Kommentar eingeben 6.) OK klicken An einem Branch arbeiten Einen Branch auschecken funktioniert genauso wie den Trunk auschecken (siehe oben). Der Arbeitszyklus ändert sich jedoch. Der Grund dafür ist, dass aufgrund der Nebenläufigkeit Änderungen, die am Trunk vorgenommen werden, nicht automatisch in den Branch übernommen werden. Dies ist aber teilweise erwünscht, teilweise aber auch unerwünscht. Beispielsweise könnte eine Klasse in einem Branch überarbeitet oder neu geschrieben werden, z.b. weil es sich um eine zentrale Klasse handelt und eine unfertige Variante der Klasse gravierende Einschränkungen in der Arbeit der anderen Entwickler bedeuten würde.

Jetzt werden aber während dessen Änderungen in der gleichen Klassen im Trunk vorgenommen. Da diese Änderungen aber die alte Variante der Klasse betreffen sind diese für die neue Variante vielleicht nicht mehr relevant. Es könnte aber auch sein, dass die Änderungen Teile der Klasse betreffen, die aus der alten Variante übernommen wurden. Daher ist eine Übernahme von Änderungen aus dem Trunk teilweise wünschenswert. Prinzipiell gibt es zwei Arbeitsabläufe. Der eine Arbeitsablauf ist identisch mit dem normalen Arbeitsablauf des Trunks. Auf diese Weise werden jedoch nur Änderungen zwischen der Working Copy und dem Branch synchronisiert. Änderungen, die am Trunk vorgenommen wurden müssen explizit übernommen werden. Dieses Übernehmen von Änderungen vom Trunk nennt man portieren. Das Problem beim Portieren ist, dass der Entwickler dies größtenteils selbst machen muss. Es kann nämlich durchaus passieren, dass durch die Übernahme von Änderungen aus dem Trunk Fehler im Branch entstehen. Beispiel: Die Parameter von Methode A werden im Branch geändert. An einer Methode B werden im Trunk Änderungen vorgenommen und Methode B ruft danach Methode A auf, jedoch noch mit den alten Parametern. Übernimmt man die Änderungen aus dem Trunk in den Branch, so wird es zu einem Fehler beim kompilieren kommen. Daher müssen Entwickler eines Branches Änderungen, die sie aus dem Trunk übernehmen, stets kontrollieren (Nur falls Zweifel aufkommen: So etwas kann nicht passieren, wenn Methode A ebenfalls im Trunk geändert worden wäre, da diese Änderungen dann für den Entwickler, der Methode B geändert hat, sichtbar wären). Ein weiteres Problem, dass Subversion mit Version 1.5 aber glücklicherweise lösen wird, ist dass man Änderungen aus dem Trunk doppelt übernimmt. Beispiel: Man portiert irgendwas aus dem Trunk in seinen Branch und ändert danach genau diese Stelle. Wenn man jetzt wieder Änderungen portiert, so erkennt Subversion nicht, dass man diese Stelle bereits aus dem Trunk portiert und im Nachhinein geändert hat. Subversion geht deshalb davon aus, dass diese Stelle ebenfalls (wieder) portiert werden muss. Um dieses Problem zu umgehen ist es daher wichtig, dass man beim Portieren im Kommentar angibt, welche Revision des Trunks man portiert, damit man beim nächsten Portieren nur spätere Revisionen portiert. Mit Version 1.5 wird es auch möglich sein nur spezielle Änderungen einer Revision zu portieren, was die Menge an Kontrollen verringert. Änderungen vom Trunk in den Branch portieren Dies sollte man am besten einmal tun bevor man anfängt zu arbeiten. Während dem Arbeiten kann man dan mit dem normalen Arbeitsablauf am Branch arbeiten. 1.) Update [svn update] 2.) Merge [svn merge] Mergen ist eine allgemeinere Form von Portieren. Beim Mergen kann man beliebige Revisionen von beliebigen Branches bzw. vom Trunk zusammenführen. Portieren ist in SVN so realisiert, dass man einen Merge durchführt, der den Trunk und einen Branch zusammen führt. Das Problem ist jetzt nur, dass beim Mergen sehr leicht falsche Angaben gemacht werden, da das Konzept etwas unintuitiv ist. Im Abschnitt Branch in den Trunk mergen wird dies deutlich werden. Für diesen Abschnitt reicht es zunächst einmal einfach nur darauf zu achten, dass man die korrekten Verzeichnisse / Revisionen ausgewählt hat. 3.) Bei From als URL zunächst den Branch auswählen (das wird gleich wieder geändert) 4.) Show Log bei From anklicken 5.) Die History von oben nach unten bis zum ersten Eintrag Ported rxxx from trunk durchsuchen. Wenn ein solcher Eintrag existiert, dann zu XXX eins addieren, merken und Cancel klicken. Wenn kein solcher Eintrag existiert (d.h. wenn zum ersten Mal etwas vom Trunk portiert wird), dann unten links in der Ecke Stop on Copy/Move

auswählen und den Eintrag mit der kleinsten Revisionsnummer auswählen und OK klicken. 6.) Jetzt bei From als URL den Trunk auswählen 7.) Wenn man in Schritt 5 einen Ported rxxx from Trunk Eintrag gefunden hatte, dann noch bei der Revision noch die gemerkte Zahl, d.h. XXX+1, eintragen. 8.) Bei To muss Use From : URL ausgewählt sein 9.) Show Log bei To anklicken 10.) Die größte Revisionsnummer (YYY) merken, diesen Eintrag auswählen und OK klicken 11.) Merge klicken 12.) Wenn Konflikt, dann Konflikt auflösen analog zu Schritt 4. und 5. des normalen Arbeitsablaufs 13.) Änderungen kontrollieren Am einfachsten kontrolliert man die Änderungen indem man alle Dateien, die als geändert markiert sind (Sternchen-Symbol an Datei) mit der vorherigen Version der Working Copy vergleicht: Rechtsklick Compare With Base Revision. Jetzt kann man wie gewohnt die Änderungen vom Trunk (sind auf der linken Seite) durchsehen und eventuell verändern oder rausnehmen. 14.) Für jede Datei mit aufgelösten Konflikten Mark Resolved 15.) Commit [svn commit] 16.) Kommentar angeben: Ported ryyy from trunk. (YYY = in Schritt 10. gemerkte Revisionsnummer vom Trunk!!!) 17.) OK klicken Branch in den Trunk mergen 1.) Den Trunk auschecken (siehe oben) oder falls ihr schon eine Working Copy vom Trunk habt: Update [svn update] 2.) Die Working Copy vom Trunk auswählen und Merge [svn merge] (Achtet drauf, dass im Merge-Fenster unten bei The result of the merge [ ] die URL des Trunks steht!) 3.) Bei From als URL den Branch auswählen 4.) Show Log bei From anklicken 5.) Unten links in der Ecke Stop on Copy/Move auswählen 6.) Revision mit kleinster Revisionsnummer auswählen und OK klicken 7.) Bei To muss Use From : URL ausgewählt sein 8.) Bei To als Revision Head Revision auswählen 9.) Merge klicken 10.) Wenn Konflikt, dann Konflikt auflösen analog zu Schritt 4. und 5. des normalen Arbeitsablaufs (die eigenen Änderungen sind diesmal rechts) 11.) Änderungen kontrollieren 12.) Für jede Datei mit aufgelösten Konflikten Mark Resolved 13.) Commit [svn commit] 14.) Kommentar eingeben (z.b.: Merged branch BranchName into trunk) 15.) OK klicken Will man weiter an dem Branch arbeiten, dann sollte man im Kommentar auch angeben, welche Revision gemerged wurde (d.h. welche Nummer die Head-Revision hat), ähnlich wie beim portieren von Änderungen aus dem Trunk und aus den gleichen Gründen. Will man die Änderungen dann wieder in den Trunk mergen, so muss man in Schritt 6. nicht die kleinste Revision auswählen, sondern die Revision nach dem letzten mergen.

Warum merge etwas unintuitiv ist: Merge führt einen Vergleich zwischen den beiden angegebenen Branches aus (From To) und wendet die Änderungen auf eine Working Copy an. Intuitiv würde man vielleicht sagen: Ich vergleiche den Trunk und meinen Branch und wende die Änderungen auf meine Working Copy des Trunks an. Das ist jedoch falsch. In diesem Vergleich würden nämlich auch alle Änderungen auftauchen, die am Trunk vorgenommen wurden, die aber für den Branch nicht mehr zutreffen (z.b. weil die entsprechende Klasse nicht mehr existiert oder ähnliches). Die korrekte Weise ist die erste Revision des Branches mit der aktuellen Revision des Branches zu vergleichen und diese Änderungen auf die Working Copy des Trunks anzuwenden. Nach dem Motto: Ich habe dir am Branch gezeigt, was du ändern musst, jetzt ändere es für mich am Trunk. Analog wird dies auch bei Änderungen vom Trunk in den Branch portieren gemacht.