Versionsverwaltung Seminar Softwareentwicklung in der Wissenschaft Robert Wiesner
Gliederung Motivation Allgemeines Varianten der Versionsverwaltung Versionierungssysteme Git als Versionierungssystem-Beispiel Zusammenfassung Diskussion 09.12.2010 Robert Wiesner 2 / 26
Ziele der Versionsverwaltung Inkrementelle Entwicklung von Versionen Verfügbarkeit der Historie Parallele Entwicklung von Branches (Zweigen) Integration von Versionen vieler Entwickler Nachvollziehbarkeit von Änderungen Koordinierte Entwicklung Effiziente Fehlerbehandlung und -suche 09.12.2010 Robert Wiesner 3 / 26
Zentrale Begriffe [LOE09] Version Control System (VCS) Revision Control System (RCS) Source Code Manager (SCM) Permutationen von revision, version, code, content, control, management, system 4 / 26
Zentrale Begriffe Das Repository als Datenbank Verwaltet Versionen von Daten Zeitlich geordnete Versionen als Historie Arbeitskopie: Datenversion in Bearbeitung Repository B A B 09.12.2010 Robert Wiesner 5 / 26
Arbeitsweise Aktualisiere/Initialisiere/Klone ein Repository Ändere Daten in der Arbeitskopie Aktualisiere das Repository (commit) B A A B 09.12.2010 Robert Wiesner 6 / 26
Arbeitsweise Lock Modify Write Verteilung über logische Einheiten Sperrobjekte nicht nebenläufig bearbeitbar Kein Zusammenführen (Merging) notwendig Copy Modify Merge Mehrere Arbeitskopien einer Datenversion Ermöglicht Verzweigung Erfordert gegebenenfalls Zusammführen 09.12.2010 Robert Wiesner 7 / 26
Lock Modify Write / Copy Modify Merge {,B,C} {A*,B,C} {B } {A,B,C} { } {A } {A,B,C} {A``} {B } {} {A } {A`} {A,B,C} {A,B,C} {A,B,C} {A,B,C} 09.12.2010 Robert Wiesner 8 / 26
Varianten der Versionsverwaltung Lokale Versionsverwaltung Einzelner Rechner Zentrale Versionsverwaltung Vernetzte Rechner Verteilte Versionsverwaltung Vernetzte Rechner 09.12.2010 Robert Wiesner 9 / 26
Lokale Versionsverwaltung Lokale Versionsverwaltung: Dateiorientiert Serielle Entwicklung In Büroanwendungen Für SIW eher uninteressant A 09.12.2010 Robert Wiesner 10 / 26
Zentrale Versionsverwaltung Client-Server-Architektur Ein Repository Streng hierarchisch Leicht Koordinierbar Parallele Entwicklung Beliebig viele Entwickler Beliebig viele Kopien A B B B 09.12.2010 Robert Wiesner 11 / 26
Verteilte Versionsverwaltung Ein Repository pro Entwickler Beliebig viele Entwickler Beliebig viele Kopien Kein Lock Modify Write Parallele Entwicklung Komplexe Koordination Zentrale Repositories möglich 09.12.2010 Robert Wiesner 12 / 26
Versionierungssysteme [BAE05] Lokale Versionierungssyteme SCCS (1972) SourceSafe ( => MS SourceSafe) Zentrale Versionierungssyteme Concurrent Version System (CVS, 1986) Subversion (SVN, 2004) Verteilte Versionierungssysteme MS Visual SourceSafe (komerziell, 1994) BitKeeper (kommerziell) Monotone Mercurial (hg) Git (2005) 09.12.2010 Robert Wiesner 13 / 26
Git als Versionierungssystem-Beispiel Eigenschaften von Git Verteiltes Versionierungssystem Copy Modify Merge Zentrale Elemente: Arbeitskopie Repository Arbeitskopie Repository 09.12.2010 Robert Wiesner 14 / 26
Zentrale Elemente Arbeitskopie Eine Datenkopie aus dem Repository Datensatz in Bearbeitung Repository Index Object Store a Arbeitskopie Index b Object Store 09.12.2010 Robert Wiesner 15 / 26
Repository Index Staging Area: Änderungen der Arbeitskopie im Repository speichern Schnittstelle zwischen Arbeitskopie und Repository Wesentliche Operationen Hinzufügen (git add <file>) Löschen (git rm <file>) Vergleichen (git diff <--cached>) b a 09.12.2010 Robert Wiesner 16 / 26
Repository Object Store Speichert Daten mit git commit Speichert Inhalte, keine Dateien (!= SVN) SHA1-Hash als Bezeichner Typen: Blobs Trees Commits Tags a C^ C b a 09.12.2010 Robert Wiesner 17 / 26
Zwischenfazit Verteiltes Versionierungssystem Arbeitskopie Repository Index Object Store git diff a b git diff --cached C^ C a b a 09.12.2010 Robert Wiesner 18 / 26
Arbeitsweise - Wiederholung Aktualisiere/Initialisiere/Klone ein Repository Ändere Daten in der Arbeitskopie Aktualisiere das Repository (commit) Hilfe: git help <cmd> B A A B 09.12.2010 Robert Wiesner 19 / 26
Arbeitsweise - Spezifisch Initialisiere/Klone ein Repository git init [<Ziel>] / git clone <Quelle> [<Ziel>] Arbeitskopie modifizieren Index aktualisieren (staging) git add [<Datei> {<Datei>}.] Repository aktualisieren git commit a b C^ C a b a 09.12.2010 Robert Wiesner 20 / 26
Branching / Merging Das Repository als Graph Commits und Branches als Knoten Beim Mergen ggf. Konflikte beheben Branch nur nach commit wechseln git checkout mybranch git add. git commit git branch mybranch A? git merge mybranch master git init git add. git commit git checkout master git add. git commit 09.12.2010 Robert Wiesner 21 / 26
Anwendungsbeispiel Live-Anwendung git checkout mybranch git add. git commit git branch mybranch A? git merge mybranch master git init git add. git commit git checkout master git add. git commit 09.12.2010 Robert Wiesner 22 / 26
Hilfe http://zrusin.blogspot.com/2007/09/git-cheat-sheet.html 09.12.2010 Robert Wiesner 23 / 26
Zusammenfassung Zentrale und verteilte Versionierungssysteme Git als (gutes) Werkzeug für SIW Koordination bleibt wichtig Save early save often Erstelle ein Versionierungskonzept und halte es ein!!! 09.12.2010 Robert Wiesner 24 / 26
Literatur [LOE09]: Jon Loeliger, 2009, Version Control with Git, O Reilly git-webseite: http://git-scm.com/ [BAE05]: Stefan Baerisch, 2005, Versionskontrollsysteme in der Softwareentwicklung, Informationszentrum Sozialwissenschaften 09.12.2010 Robert Wiesner 25 / 26
Diskussion / Fragen git checkout mybranch git add. git commit git branch mybranch A? git merge mybranch master git init git add. git commit git checkout master git add. git commit 09.12.2010 Robert Wiesner 26 / 26
Optional - Zentrale Versionsverwaltung in Git HowTo: Zentrale Versionsverwaltung Nutze ein Repository ohne Arbeitskopie git init --bare Definiere das zentrale Repository git clone <bare> <Ziel> oder git remote add origin <bare> Synchronisiere Daten git push <origin [branch]> git pull 09.12.2010 Robert Wiesner X / Y