Inhaltsverzeichnis
06. Versionsverwaltung
- Themen
- Motivation: Warum Versionsverwaltung?
- Übersicht über verschiedene Versionsverwaltungssysteme
- Grundlegendes Arbeiten mit einer Versionsverwaltung
- Strukturierung von Arbeitsabläufen
- Folien
- Glossar
- Video
- MP4
Webcast
Hinweis: Der Webcast wurde mit Tiny Webcasts for Lecture(r)s erstellt.
Zentrale Aspekte
- Versionsverwaltung wirkt sich befreiend auf die Softwareentwicklung aus.
- Versionsverwaltung ist essentiell, um jederzeit eindeutig
die verwendete Version einer Routine zu identifizieren. - Verteilte Versionsverwaltungssysteme erleichtern die Verwendung
und verringern externe Abhängigkeiten. - Für ein größeres Projekt sollte ein klarer Arbeitsablauf
festgelegt und konsequent befolgt werden. - Versionsverwaltung hat (neben automatisierten Tests)
den größten Einfluss auf die Art zu programmieren.
Fragen zur Vertiefung und Wiederholung
Diese Fragen dienen der persönlichen Beschäftigung mit der Thematik, werden aber nicht separat in der Vorlesung besprochen.
- Welchen entscheidenden Einfluss hat Versionsverwaltung (richtig eingesetzt) auf die Art zu programmieren? Warum ist das für die Entwicklung guter Software (wiederverwendbar, zuverlässig, überprüfbar) so wichtig?
- Warum ist der Einsatz eines Versionsverwaltungssystems für die Entwicklung eines Systems zur wissenschaftlichen Datenauswertung zwingend notwendig und auch nicht verhandelbar?
- Welche Vorteile liefern verteilte Versionsverwaltungssysteme wie git gegenüber zentral(isiert)en Systemen? Wie kann sich das auf die Codequalität und die Art der Programmierung auswirken?
- Welche grundlegenden Arbeitsabläufe lassen sich strukturieren bzw. automatisieren? Warum ist Strukturierung und Automatisierung wichtig?
Arten von Versionsverwaltungssystemen
Versionsverwaltungssysteme lassen sich in drei Kategorien einteilen: lokal, zentral und dezentral (verteilt). Da die Schemata zwar in der Vorlesung gezeigt wurden, aber nicht vollständig in der oben verlinkten PDF-Version der Folien zur Vorlesung auftauchen, sind sie nachfolgend wiedergegeben.



Welches Versionsverwaltungssystem?
Die Frage lässt sich nicht allgemein beantworten. Aus der eigenen Erfahrung und im Kontext der Entwicklung von Software für die Datenauswertung im akademischen Kontext ist Git eine sehr gute Wahl.
Wer seine Entwicklungen mit der Welt teilen und darüber hinaus viele weitere hilfreiche Infrastruktur rund um git nutzen möchte, dem sei GitHub empfohlen. Ein kostenloser Account erlaubt beliebig viele Repositories, die für jeden zumindest lesbar sind. Alternativen – auch zum selbst hosten – sind GitLab und Gitea, letzteres mit deutlich geringerem Ressourcenbedarf. Alle sind Web-Plattformen, die reichhaltige zusätzliche Funktionalität rund um git und eine komfortable Nutzerschnittstelle für die Arbeit mit git bieten.
Wer sich zwischen Gitea und anderen Lösungen wie GitHub und GitLab entscheiden muss und etwas Unterstützung braucht: Gitea liefert einen Vergleich der Funktionalität:
Weiterführende Literatur/Links
Eine kommentierte und handverlesene Liste mit weiterführender Literatur zum Thema. Die Auswahl ist zwangsläufig subjektiv.
git und Versionsverwaltung
Eine sehr gute Einführung in Versionsverwaltung allgemein und die Spezifika von git liefert das Pro Git book [Chacon, 2014Chacon, Scott; Straub, Ben (2014): Pro Git, Apress, New York], das online frei verfügbar ist – sowohl als Webseite im HTML-Format als auch als PDF oder Ebook. Eine deutlich kürzere, aber sehr pragmatische Einführung liefern die beiden Kapitel zu lokaler und entfernter Versionsverwaltung mit Git in [Scopatz, 2015Scopatz, Anthony; Huff, Kathryn D. (2015): Effective Computation in Physics, O'Reilly, Sebastopol] – ein Buch, das darüber hinaus jedem empfohlen ist, der sich mit den Themen der Vorlesung weiter befassen möchte.
- Chacon, Scott; Straub, Ben (2014): Pro Git, Apress, New York
- Scopatz, Anthony; Huff, Kathryn D. (2015): Effective Computation in Physics, O'Reilly, Sebastopol
Struktur von Commit-Messages
Es erscheint ja nur wie eine kleine Sache, aber die Struktur und Gestaltung von Commit-Messages kann immensen Einfluss auf die Nutzbarkeit haben – ähnlich der Betreffzeile bei Emails, die idealerweise dem Empfänger sofort erlaubt, das Thema der Nachricht zu erfassen.
Spezifisch für git formuliert, aber in seinen Ideen weit darüber hinaus einsetzbar, gibt es im Blog von Tim Pope eine schöne Zusammenfassung:
Git-Arbeitsabläufe
Eine schöne Übersicht über unterschiedliche Arbeitsabläufe mit git findet sich bei den git-Tutorials von Atlassian: Comparing Workflows.
Der originale Blogpost für git flow von Vincent Driessen, A successful Git branching model, ist sicherlich lesenswert, egal ob man git flow am Ende einsetzen möchte oder nicht. Der große Vorteil von git flow ist die Unterstützung auf der Kommandozeile über entsprechende git-Erweiterungen.
Zwei beachtenswerte Alternativen zu git flow, die gleichzeitig auf die Schwierigkeiten mit git flow in manchem Kontext eingehen, sind github flow und gitlab flow.