16 Versionskontrolle

Versionskontrolle ist ein grundlegender Bestandteil moderner Softwareentwicklung und DevOps-Strategien. Sie ermöglicht es, den Verlauf von Codeänderungen nachzuverfolgen, unterschiedliche Versionen zu verwalten und die Zusammenarbeit zwischen Entwicklern zu erleichtern. Dieses Kapitel behandelt die Bedeutung der Versionskontrolle für die Zusammenarbeit und stellt gängige Tools zur Versionskontrolle vor.

16.1 Bedeutung der Versionskontrolle für die Zusammenarbeit

16.1.1 Nachverfolgbarkeit von Änderungen

Versionskontrollsysteme ermöglichen es, jede Änderung am Code nachzuverfolgen und den Autor sowie den Zeitpunkt der Änderung zu identifizieren. Dies schafft eine klare Historie und hilft, die Entstehung von Fehlern oder Bugs zu verstehen und rückgängig zu machen. Die Nachverfolgbarkeit fördert die Transparenz und erleichtert die Fehlerbehebung und das Debugging.

16.1.2 Verbesserung der Zusammenarbeit

Die Versionskontrolle unterstützt die Zusammenarbeit, indem sie es mehreren Entwicklern ermöglicht, gleichzeitig am gleichen Projekt zu arbeiten, ohne dass sich ihre Änderungen überschneiden oder Konflikte verursachen. Änderungen können in separaten Branches durchgeführt und später zusammengeführt werden. Dies ermöglicht eine parallele Entwicklung und vereinfacht das Management großer Teams und Projekte.

16.1.3 Erleichterung des Code-Reviews

Versionskontrollsysteme erleichtern Code-Reviews, da sie Änderungen klar und nachvollziehbar darstellen. Entwickler können Pull-Requests oder Merge-Requests erstellen, die von anderen Teammitgliedern überprüft werden. Dies fördert die Einhaltung von Code-Standards, verbessert die Code-Qualität und dient als Lernmöglichkeit innerhalb des Teams.

16.1.4 Unterstützung von Continuous Integration und Continuous Delivery

Versionskontrollsysteme sind ein zentraler Bestandteil von CI/CD-Pipelines. Automatisierte Build- und Testprozesse werden durch jede Änderung im Versionskontrollsystem ausgelöst. Dies gewährleistet, dass der Code kontinuierlich getestet und integriert wird, was die Qualität und Stabilität der Software verbessert.

16.1.5 Konfliktmanagement

Versionskontrollsysteme bieten Mechanismen zur Erkennung und Auflösung von Konflikten, die auftreten können, wenn mehrere Entwickler gleichzeitig am gleichen Code arbeiten. Diese Mechanismen unterstützen die Zusammenführung von Änderungen und helfen, Konflikte effizient zu lösen, was den Entwicklungsprozess reibungsloser macht.

16.2 Source of Truth

In vielen modernen Softwareprojekten fungieren Versionskontrollsysteme (VCS) als zentrale Source of Truth. Diese zentrale Rolle bedeutet, dass alle wichtigen Informationen und der aktuelle Stand des Codes in diesen Systemen gespeichert und verwaltet werden. Dies gilt sowohl für die Produktions- als auch für die Entwicklungsumgebungen und für Continuous Integration (CI) und Continuous Delivery (CD) Prozesse. Die Versionskontrolle gewährleistet, dass alle Teams auf dem gleichen Stand arbeiten und dass Änderungen konsistent und nachvollziehbar sind.

16.2.1 Bedeutung der Source of Truth

Die Versionskontrollsysteme sind die zentrale Quelle der Wahrheit für den Code und die damit verbundenen Konfigurationsdateien. Dies hat mehrere Vorteile:

16.2.2 Branch-basierte Strategien

Branches in Versionskontrollsystemen ermöglichen es, verschiedene Entwicklungsstränge parallel zu verfolgen. Dies ist besonders nützlich für die Entwicklung neuer Features, das Bugfixing und die Durchführung von Code-Reviews.

Branch-basierte Strategien bieten Flexibilität und ermöglichen eine strukturierte und parallele Entwicklung. Jeder Entwickler kann in einem eigenen Branch arbeiten, Änderungen testen und erst dann in den Main Branch integrieren, wenn sie stabil sind.

16.2.3 Tag-basierte Strategien

Tags sind unveränderliche Markierungen, die spezifische Punkte in der Historie des Repositories bezeichnen. Tags werden häufig verwendet, um Releases zu kennzeichnen.

Tag-basierte Strategien sind besonders nützlich, um stabile Versionen des Codes zu markieren und sicherzustellen, dass diese Versionen konsistent in verschiedene Umgebungen deployt werden können.

16.2.4 Integration von CI/CD-Systemen

CI/CD-Systeme wie Jenkins, GitLab CI/CD oder Argo CD integrieren sich tief in das Versionskontrollsystem und nutzen dessen Funktionalitäten, um den Automatisierungsprozess zu steuern. Hier ein Beispiel für die Verwendung von Argo CD als Source of Truth:

  1. Argo CD: Eine GitOps-Lösung, die Git-Repositories als Source of Truth für deklarative Infrastruktur und Anwendungen verwendet.
  2. Branch-based Deployment: Argo CD kann so konfiguriert werden, dass Änderungen in bestimmten Branches automatisch in eine Zielumgebung deployt werden.
  3. Tag-based Deployment: Argo CD kann ebenfalls auf Tags reagieren, um spezifische Versionen einer Anwendung zu deployen.

Durch die Verwendung solcher Strategien und Tools stellen Versionskontrollsysteme sicher, dass der gesamte Entwicklungs- und Bereitstellungsprozess konsistent, nachvollziehbar und automatisierbar bleibt. Dies macht sie zu einer unverzichtbaren Komponente moderner DevOps-Praktiken und zur zentralen Source of Truth in vielen Projekten.

16.3 Tools zur Versionskontrolle (z.B. Git)

Es gibt verschiedene Tools zur Versionskontrolle, die in der Softwareentwicklung weit verbreitet sind. Hier sind einige der bekanntesten und am häufigsten verwendeten:

16.3.0.1 Git

16.3.1 Subversion (SVN)

16.3.2 Mercurial

16.3.3 Perforce