Software(technik)praktikum © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial: Subversion (SVN) Software(technik)praktikum – SVN-Tutorial Übersicht Kurz: Übersicht Versionsmanagement siehe auch Vorlesungs-Folien © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Werkzeuge Grundsätzliches Integration in Eclipse Praktische Übung mit SVN Commits, Updates, Konflikte lösen Branch/Merge (wenn noch Zeit) Weitere Tipps Software(technik)praktikum – SVN-Tutorial © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Versions- und Konfigurationsmanagement Beobachtung: Software besteht aus vielen verschiedenen Dokumenten (Anforderungen, Design, Programmcode, Dokumentation, Handbuch, …) Software-Entwicklung ist Teamarbeit Konsequenz: Viele verschiedene Personen greifen auf dieselbe Menge von Dokumenten zu Oft bearbeiten verschiedene Personen gleichzeitig (unabhängig voneinander) dasselbe Dokument Bearbeitungs-Konflikte vermeiden Software(technik)praktikum – SVN-Tutorial Synchronisation von Dateien Repository src Main.java,v App.java,v doc index.html,v main.html,v © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn edit src Main.java App.java doc index.html main.html Update Update Commit edit SVN Commit Benachrichtigung (z.B. per E-Mail) Software(technik)praktikum – SVN-Tutorial src Main.java App.java doc index.html main.html Werkzeuge Concurrent Versions System (CVS) Älteres System © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Subversion (SVN) Versionierung des kompletten Projektarchivs anstatt einzelner Ressourcen Bessere Unterstützung für Erstellen, Löschen, Umbenennen Besserer Umgang mit Binärdaten Lokale Kopien des „Basis“-Versionen der Ressourcen Software(technik)praktikum – SVN-Tutorial Subversion trunk Haupt-Entwicklungszweig In der Regel arbeitet man darin branches © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn tags Neben-Entwicklungszweige Markierungen für bestimmte Zeitpunkte z.B. „Release 1.0“ Alles sind Ressourcen in SVN, keine separaten Konzepte für Branches und Tags Software(technik)praktikum – SVN-Tutorial Grundsätzliche Tipps (1) Keinen nicht compilierbaren Code einchecken © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Bugs sind in der Regel kein Problem, es sei denn sie machen das Programm unbenutzbar Für Experimente mit größeren Folgen Branches verwenden Nur notwendige Ressourcen einchecken Keine Ausgabe-Dateien (*.class,…) oder Logfiles In Eclipse: „Derived Resources“ • Flag wird oft automatisch gesetzt, kann aber auch manuell gesetzt werden Besser: svn:ignore benutzen Software(technik)praktikum – SVN-Tutorial Grundsätzliche Tipps (2) Aussagekräftige Commit-Kommentare © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Schlecht: „ClassA.java geändert“ Besser: „NPE-Bug behoben“ Gut: „Bug #1234 behoben, verursacht durch NPE in ClassA.main()“ Zeilen nicht zu lang werden lassen Zeilenbasiertes Mischen beim Update Wichtig für LaTeX Binär-Dateien nur wenn nötig, weil automatisches Mischen nicht möglich (Ausnahmen: siehe Folie 18) Konflikte schwer zu beheben Software(technik)praktikum – SVN-Tutorial Eclipse: Subversive (1) © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn http://www.eclipse.org/subversive/ documentation/gettingStarted/ aboutSubversive/install.php Help Software Updates… Available Software, Add Site… SVN Update Sites: http://download.eclipse.org/technology/ subversive/0.7/update-site/ http://www.polarion.org/projects/ subversive/download/eclipse/2.0/ update-site/ Software(technik)praktikum – SVN-Tutorial Eclipse: Subversive (2) Subversive-Eclipse-Plugins Benötigt: • SVN Team Provider • mind. einen SVN Connector, z.B. SVNKit, JavaHL © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Optional: • SVN Team Provider Localization • SVN Integration for Mylyn • SVN JDT Ignore Extensions Eines von vielen Tutorials: http://cs.wustl.edu/~cytron/cse132/HelpDocs /Subversive/subversive.htm Software(technik)praktikum – SVN-Tutorial Eclipse: Subclipse Eine Alternative zu Subversive ist Subclipse: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn http://subclipse.tigris.org/ Außerhalb von Eclipse bietet sich unter Windows der SVN-Client TortoiseSVN an: http://tortoisesvn.tigris.org/ Software(technik)praktikum – SVN-Tutorial Praktische Übungen © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Diese Übungen können im Team-Repository durchgeführt werden Teams bilden zu je zwei Leuten (A / B) und gemeinsam arbeiten Übung 1: Neue Klasse Check Out https://svn-serv-lab.cs.upb.de/swtpra2012-XY bzw. https://svn-serv-lab.cs.upb.de/sopra2012-XY © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn A: Neue Datei 1. 2. Neue Klasse erstellen: Factorial.java Fakultäts-Funktion public static long fac(int n) rekursiv implementieren 3. 4. 5. Team Synchronize (auf Projekt) SVN Add to version control… Commit B: Team Synchronize, Update Software(technik)praktikum – SVN-Tutorial Übung 2: Merging © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Merging 1. 2. A: Methode fac() durch eine iterative Version ersetzen B: Methode public static void printfac() ergänzen, die die Fakultäten von 5 und 10 ausgibt (wichtig: unterhalb von fac()); aufrufen in main()-Methode 3. 4. 5. 6. A: Compare with… A: Synchronize with Repository, Einchecken B: Compare with … B: Synchronize with Repository, Einchecken, Update, Einchecken Software(technik)praktikum – SVN-Tutorial Übung 3: Konflikte Konflikte © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn 1. 2. 3. A, B: In der printfac()-Methode die Berechnung der Fakultät durch eine Schleife ersetzen, die alle Fakultäten von 1…5 (A) oder 1…10 (B) berechnet B: Einchecken A: Entweder 1. 2. Konflikt auflösen (Doppelklick auf Datei in Sync View, Copy All Non-Conflicting Changes, Rest manuell links anpassen) Commit A: Oder 1. 2. Update und schauen Konflikt auflösen (in Sync View Rechtsklick Edit Conflicts, anschließend Mark as Merged), Commit Software(technik)praktikum – SVN-Tutorial Übung 4: Revision History A: Tag erstellen mit dem Namen „Version 0.4 von team_#TEAM#“ © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn A, B: Umgang mit der Versions-Geschichte üben Show History Diverse Compare-Operationen Replace With Revision, Get Content Einfach ausprobieren! Software(technik)praktikum – SVN-Tutorial Übung 5: Branch/Merge Branch/Merge © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn 1. A: Neuen Branch erzeugen: • • Fakultäts-Berechnung mit Caching implementieren Neue Funktion static long fac_cache(int n) wird in fac() aufgerufen • Team Branch (Name: „test-swtpra12/team_#TEAM#“), Start working in the branch B: Begrenzung auf n ≤ 20 in fac() einbauen und einchecken B: Branch mit trunk mergen: 2. 3. • • TeamMerge, URL = „branches/test-swtpra12 ¬ /team_#TEAM#/de.upb.swtpra12.svntutorial“ Konflikte lösen, Commit Software(technik)praktikum – SVN-Tutorial SVN: Weitere Infos © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Weitere Informationen auf den WWWSeiten des Softwaretechnikpraktikums und http://subversion.tigris.org http://svnbook.red-bean.com Weitere Frontends: TortoiseSVN http://tortoisesvn.net/ • Unterstützt MS Office, OpenOffice Software(technik)praktikum – SVN-Tutorial Übung 6: MS Office Umgang mit Word-Dokumenten © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn 1. 2. 3. 4. 5. A, B: TortoiseSVN installieren A: Word-Dokument anlegen und mit zwei Absätzen versehen, Einchecken B: Update A, B: Beide verändern jeweils einen Absatz A, B: Commit / Update Software(technik)praktikum – SVN-Tutorial