Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:lehre:programmierkonzepte:ss2020:06:index

06. Versionsverwaltung

Themen
Motivation: Warum Versionsverwaltung?
Übersicht über verschiedene Versionsverwaltungssysteme
Grundlegendes Arbeiten mit einer Versionsverwaltung
Strukturierung von Arbeitsabläufen
Folien
PDF
Glossar
PDF
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.

Abbildung 1: Schema der Funktionsweise einer lokalen Versionsverwaltung. Im Gegensatz zur zentralen (vgl. Abb. 2) und verteilten (vgl. Abb. 3) Versionsverwaltung wird die Versionsinformation rein lokal (oft sogar in derselben Datei) abgelegt, ohne die Möglichkeit des Abgleichs mit anderen Rechnern.
Abbildung 2: Schema der Funktionsweise einer zentralen Versionsverwaltung. In vieler Hinsicht das „klassische“ Schema der Versionsverwaltung, wie es von CVS und SVN bekannt ist und für die Versionskontrolle von Software in Teams oftmals verwendet wird. Im Gegensatz zur verteilten Versionsverwaltung (vgl. Abb. 3) gibt es ein zentrales Repository auf einem Server, darüber hinaus muss für die Arbeit mit der Versionsverwaltung (meist) eine Verbindung zu diesem Server bestehen.
Abbildung 3: Schema der Funktionsweise einer verteilten Versionsverwaltung. Populär geworden durch git, ist der größte Unterschied zu einer zentralen Versionsverwaltung (vgl. Abb. 2), dass jedes lokale Repository die gesamte Historie enthält und eigenständig ist. Es gibt keinen zentralen Server (auch wenn ein Repository als Zentrale verwendet werden kann), die Arbeit ist ohne Netzwerkverbindung möglich, was der „commit early, commit often“-Strategie der agilen Softwareentwicklung sehr entgegenkommt.

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. 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.

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.

de/lehre/programmierkonzepte/ss2020/06/index.txt · Zuletzt geändert: 2020/09/30 21:35 von 127.0.0.1