Versionsverwaltung von Softwareartefakten
21. Oktober 2014
Taentzer Einführung in die Softwaretechnik 43
Überblick
Wie verwaltet man Softwareartefakte? Versionskontrolle für verschiedene Softwareartefakte:
Anforderungsdokumente, Modelle, Code, Testdateien, Dokumentationen, etc.
Möglichst unabhängiges Arbeiten im Team Nutzen: Dokumentation von Änderungen, Konflikte erkennen und
lösen, Release zusammenstellen
Einführung in Versionsverwaltungswerkzeuge SVN – zentrale Verwaltung von Dateien und Ordnern Git – Verteilte Versionsverwaltung
Taentzer Einführung in die Softwaretechnik 44
Versionsverwaltung
Ein Versionsverwaltungssystem soll das gemein-schaftliche Arbeiten an Dokumenten ermöglichen. Hauptproblem: Wie ermöglicht das Versionsverwaltungssystem
den Nutzern Zugang zu gemeinsamen Dokumenten, ohne versehentlich Informationen zu löschen?
Ansatz: Alle gemeinschaftlich genutzten Dokumente werden in einem
Repository (einem speziellen Datenbehälter) verwaltet. Die Nutzer bekommen Lese- bzw. Schreibzugang zu Dokumenten
im Repository.
Taentzer Einführung in die Softwaretechnik 45
Das Problem Zwei Nutzer entscheiden
sich, an demselben Dokument zu arbeiten.
Beide führen verschiedene Änderungen an ihren lokalen Versionen des Dokuments durch.
Die lokalen Versionen werden nacheinander in das Repository geschrieben.
Der zweite Nutzer überschreibt dadurch eventuell Änderungen des ersten Nutzers.
aus „Version Control with Subversion“
Taentzer Einführung in die Softwaretechnik 46
Problemlösung durch Sperren von Dokumenten
Der erste Nutzer sperrt das Dokument und arbeitet lokal daran.
Der zweite Nutzer möchte das Dokument lesen, es ist aber gesperrt.
Der erste Nutzer schreibt sein geändertes Dokument ins Repository und entsperrt es.
Der zweite Nutzer kann nun das Dokument lesen und für andere sperren.
aus „Version Control with Subversion“
Taentzer Einführung in die Softwaretechnik 47
Wie gut ist diese Problemlösung?
Administrative Probleme: Gesperrte Dokumente werden vergessen zu entsperren. Andere
Nutzer kommen an die gesperrten Dokumente nicht ran.
Unnötige Sequentialisierung der Arbeit: Wenn zwei Nutzer ein Dokument an verschiedenen Stellen ändern
möchten, könnten sie dies auch gleichzeitig tun.
Falsches Gefühl von Sicherheit: Zwei Nutzer arbeiten getrennt auf den Dokumenten A und B. Was
passiert, wenn A von B abhängig ist? A und B passen nicht mehr zusammen. Die Nutzer müssen dieses Problem diskutieren.
Taentzer Einführung in die Softwaretechnik 48
Problemlösung durch Mischen von Dokumenten
Die Nutzer kopieren das Dokument in ihre lokalen Ordner.
Sie arbeiten unabhängig daran. Einer schreibt als Erster das
Dokument in das Repository zurück.
Der Zweite kann das Dokument nicht zurückschrieben: „out of date“
aus „Version Control with Subversion“
Taentzer Einführung in die Softwaretechnik 49
Problemlösung durch Mischen von Dokumenten
Der Zweite vergleicht seine lokale Version mit der aktuellen im Repository.
Beide Versionen werden gemischt.
Die neue (gemischte) Version wird zurückgeschrieben.
Die neue Version kann ausgelesen werden.
aus „Version Control with Subversion“
Taentzer Einführung in die Softwaretechnik 50
Eigenschaften dieser Problemlösung
Ein Dokument liegt in zwei Versionen vor. Die Änderungen eines Nutzers überlappen sich mit den
Änderungen des zweiten Nutzers. Diese Situation wird Konflikt genannt.
Lassen sich zwei Dokumente immer mischen? Die Unterschiede zwischen zwei Versionen lassen sich durch
Werkzeuge anzeigen. Ein Nutzer (eventuell in Absprache mit dem zweiten Nutzer) entscheidet jeden einzelnen Konflikt.
Die Praxis hat gezeigt, dass die meisten nebenläufigen Änderungen an einem Dokument konfliktfrei sind.
Taentzer Einführung in die Softwaretechnik 51
Revisionen
Revision: Ein Zustand der zu verwaltenden Softwareartefakte
Softwareartefakte sind in Ordnern gegliedert.
Versionsverwaltung sollte nicht nur die Dateien, sondern auch die Ordner verwalten.
Taentzer Einführung in die Softwaretechnik 52
Subversion
Versionsverwaltungssoftware für Dateien UND Ordner Open Source Software von CollabNet entwickelt:
http://subversion.apache.org/ Features:
Versionierung von Ordnern und Dateien Auch das Umbenennen, Erzeugen und Löschen von Ordnern
werden festgehalten. Sammlung von Änderungen wird als Transaktion verwaltet.
SVN-Book unter: http://svnbook.red-bean.com/ Subclipse: Subversion für Eclipse:
http://subclipse.tigris.org/
Taentzer Einführung in die Softwaretechnik 53
Neues Repository aufsetzen
Repository erzeugen: svnadmin create <Repositoryname>
Initial Repositorystruktur aufsetzen: svn import <Name> file://<Ordnername>
Repository anzeigen: svn list file://<Repositoryname>
Taentzer Einführung in die Softwaretechnik 54
Typischer Arbeitszyklus
Arbeitskopie auf den neuesten Stand bringen: svn update
Änderungen an der Ordner-struktur durchführen: svn add svn delete svn copy svn move
Änderungen prüfen: svn status svn diff
Änderungen zurücknehmen (optional): svn revert
Konflikte auflösen: svn update svn resolved
Änderungen in das Repository einlesen: svn commit
Taentzer Einführung in die Softwaretechnik 55
Subversion in Eclipse Eclipse Plugins: Subversive,
Subclipse Wechsel zur SVN Repository
Exploring Perspective Für das Arbeiten mit einem
bestehenden Repository muss die Repository Locationangegeben werden: New Repository Location
Neues Repository anlegen:New Repository
Für den Import eines bestehenden Projekts in das SVN Repository: Import eclipse.org/subversive
Taentzer Einführung in die Softwaretechnik 56
Subversion in Eclipse
In SVN Repository Explorer: Checkout lädt eine bestimmte Revision aus dem Repository herunter.
Lokales Arbeiten in der Java-Perspektive. SVN-Befehle unter Team →…
Synchronisation im Team: Überblick über Änderungen im Projekt: Window→OpenPerspective → Other..., dort Team Synchronizing Die Team Synchronization
Perspective wird gestartet.subclipse.tigris.org
Taentzer Einführung in die Softwaretechnik 57
Git Software für verteilte Versionsverwaltung Kein zentraler Server nötig Lokale Kopie des gesamten Repository
Lokale Funktionalität ähnlich wie bei SVN Neue Features:
Versionen als Schnappschüsse eines Mini-Dateisystems Nichtlineare Entwicklung von Software: einfaches Branching und
Merging Datenabgleich zwischen verschiedenen Repositories möglich
Git-Buch: ProGit unter: http://git-scm.com/book Git in Eclipse: http://www.eclipse.org/egit
Aufbau eines zentralen Repository ein zentrales Repository für
die Arbeitsgruppe z.B. in der Cloud
lokale Arbeitsbereiche oderlokale Repositories
Taentzer Einführung in die Softwaretechnik 58
confluence.atlassian.com
Taentzer Einführung in die Softwaretechnik 59
Git in Eclipse Eclipse Plugin: EGit Wechsel zur Git Repository
Perspective Versionsverwaltung starten:
Neues Git Repository anlegen mit Create
Vorhandenes Repository kopieren mit Clone
Vorhandenes Projekt in ein neues Repository legen: Team -> Share Project
Lokales Arbeiten in der Java-Perspektive. Git-Befehle unter Team →…
eclipse.org/subversive
Clone eines Git Repository Um lokal auf das
entfernte Repository zugreifen zu können Auswahl einzelner
Branches Angabe des lokalen
Ordners
Taentzer Einführung in die Softwaretechnik 60
Lade lokaleSourcen
Push lädt einen lokalen Branchoder eine Reihe von Commits in ein entferntes Repository.
zum Veröffentlichen von Beiträgen
Pull lädt einen Branch runter.
Taentzer Einführung in die Softwaretechnik 61
Entferntes Repository
Taentzer Einführung in die Softwaretechnik 62
Austausch zwischen Repositories: Ein Beispielablauf
Ein zentrales Repository Lokales Mischen
Beispiel: John kann nach Jessica kein Push ausführen. Er muss ihre Änderungen holen und lokal mischen.
Das Holen von Änderungen (fetch, pull) führt zu einem neuen Branch.
Das lokale Mischen (merge) führt zwei Brancheszusammen.
Taentzer Einführung in die Softwaretechnik 63
aus „ProGit“
Vergleich verschiedener Versionen
Taentzer Einführung in die Softwaretechnik 64
Versionierung in verschiedenen Entwicklungsprozessen
Kleines Projekt: Kleines Team Ein zentrales Repository Jedes Team-Mitglied darf
alle Dateien lesen und schreiben.
Bekanntes Modell
Taentzer Einführung in die Softwaretechnik 65
aus „ProGit“
Versionen als Schnappschüsse
Version: Mini-Dateisystem in einem Zustand Unveränderte Dateien werden nicht kopiert.
Git fügt nur Daten hinzu.
Taentzer Einführung in die Softwaretechnik 66
aus „ProGit“
Typische Git-Befehle auf lokalem Repository
Start der Versionierung: git add <filename>
Datei auschecken: git checkout <filename>
Versionierungsabfragen: git status (Status der Dateien) git log (Historie)
Änderungsanzeige (vor commit) git diff
Datei einchecken: git add <filename> ( Index)
git commit (indizierte Dateien) git commit –a <filename> Datei aus Repository löschen:
git rm <filename>
Taentzer Einführung in die Softwaretechnik 67
Commit-Objekt: Referenz auf einen
Schnappschuss Commit-Objekte zeigen
jeweils auf das vorige.
Weitere Einträge sind … der Autor, der Committer und die Commit-Message
Taentzer Einführung in die Softwaretechnik 68
Branches
aus „ProGit“
Der Default-Branch heisst „master“.
Zwei Branches können auf denselben Schnappschuss verweisen.
Der aktuelle Branch heisst „HEAD“.
Taentzer Einführung in die Softwaretechnik 69
Branches
aus „ProGit“
Branches
Die Historie läuft auseinander:Beispiel: „master“-Branch „testing“-Branch
Der Nutzer kann… beliebig zwischen den
Branches wechseln. die Branches zusammen-
führen
Taentzer Einführung in die Softwaretechnik 70
aus „ProGit“
Beispiel für Branches
Taentzer Einführung in die Softwaretechnik 71
http://nvie.com/posts/a-successful-git-branching-model/
Versionierung in verschiedenen Entwicklungsprozessen
Mittelgroßes Projekt: Jeder Entwickler hat ein eigenes Repository.
Der eigene Entwickler hat Schreibzugriff. Alle anderen Entwickler haben Lesezugriff.
Der Integration Manager liest Änderungen und integriert sie in die Hauptversion. Er hat Schreibzugriff auf das Haupt-Repository. Alle anderen Entwickler haben Lesezugriff.
Taentzer Einführung in die Softwaretechnik 72
aus „ProGit“
Versionierung in verschiedenen Entwicklungsprozessen
Sehr großes Projekt: Hunderte von Entwicklern Hierarchische Versionierung Lieutenant: Integration
Manager für einen Teil des Projekts
Dictator: Integration Manager für alle Teile des Projekts Er hat Schreibzugriff auf das
Haupt-Repository.
Taentzer Einführung in die Softwaretechnik 73
aus „ProGit“
Taentzer Einführung in die Softwaretechnik 74
Zusammenfassung Wesentliche Features der Versionsverwaltung:
Anforderungsdokumente, Modelle, Code, Testdateien, Dokumentationen, etc. sind ständigen Änderungen unterworfen, die versioniert werden sollen.
Unterstützung für nebenläufiges Arbeiten im Team. Konsistente Konfigurationen durch die Versionierung von Ordnern
und Dateien Häufiges Commit mit Dokumentation der Änderungen Verschiedene Branches für verschiedene Entwicklungen im Projekt Verteilte Repositories für verteilte Versionskontrolle im Projekt
Fortschritt in der Werkzeugentwicklung f. Versionsverwaltung: CVS SVN Git