Inhaltsverzeichnis
06. Versionsverwaltung
- Themen
- Motivation: Warum Versionsverwaltung?
- Übersicht über verschiedene Versionsverwaltungssysteme
- Grundlegendes Arbeiten mit einer Versionsverwaltung
- Strukturierung von Arbeitsabläufen
- Folien
- Glossar
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, und es dürfte auch das am Weitesten verbreitete (verteilte) Versionsverwaltungssystem sein.
Weboberflächen
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. Eine Alternative – auch zum selbst hosten – ist GitLab. Beide sind Web-Plattformen, die reichhaltige zusätzliche Funktionalität rund um git und eine komfortable Nutzerschnittstelle für die Arbeit mit git bieten. Wer es gerne schlank und schnell hat und selbst hosten möchte, schaut sich Gitea an,
Es ist wichtig, das eigentliche Versionsverwaltungssystem/-werkzeug (git) von der (Web-)Oberfläche (GitHub, GitLab, Gitea, …) zu unterscheiden. git wird immer lokal installiert und bringt als verteiltes Versionsverwaltungssystem alle entsprechenden Vorteile (keine Abhängigkeit von Netzwerk oder Internetverbindung, …) mit. Darauf aufbauend bieten Oberflächen wie GitHub, GitLab etc. weitere Funktionalität wie Bugverwaltung (Issue Tracking) etc. Versionsverwaltung ist aber erst einmal komplett unabhängig von diesen (Web)Oberflächen und entsprechenden Accounts.
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.
Wer sich aktiv spielerisch mit den durchaus komplexen Vorgängen von git, insbesondere mit Zweigen etc., auseinandersetzen möchte, dem sei die Seite Learn Git Branching empfohlen.
Wer es gerne etwas praktischer hätte und git für eigene Projekte einsetzen möchte, der wird im entsprechenden Kapitel des (englischsprachigen) Python-Kurses des Autors fündig.
- 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.
Wer selbst gerne das Schema „In case of fire“ („git commit - git push - leave building“) zum Ausdrucken hätte, wird auf GitHub fündig: https://github.com/louim/in-case-of-fire.