Was ist Versionskontrolle?

Was ist Versionskontrolle?

Versionskontrollsysteme sind Softwaretools, mit deren Hilfe Softwareteams Quellcodeänderungen verwalten können. Die Versionskontrollsoftware verfolgt jede Änderung am Code und speichert sie in einer speziell hierfür angelegten Datenbank. Unterläuft einem Entwickler ein Fehler, kann er einen Schritt zurück machen, seinen Code mit früheren Codeversionen abgleichen und Korrekturen implementieren, mit minimalen Beeinträchtigungen für seine Teamkollegen.

Der Quellcode ist das Herzstück nahezu jedes Softwareprojekts – eine extrem wertvolle Ressource, die es effektiv zu schützen gilt. Er enthält das gesamte Wissen über die Problemdomäne, das die Entwickler des Softwareteams in harter und gründlicher Arbeit gesammelt und verfeinert haben. Eine Versionskontrollsoftware schützt diesen Quellcode nicht nur vor den Folgen echter Katastrophenfälle, sondern auch vor einer schleichenden Verschlechterung durch menschliche Fehler und unbeabsichtigte Auswirkungen implementierter Änderungen.

Softwareentwickler, die in Teams arbeiten, schreiben ständig neuen Quellcode und ändern vorhandenen Quellcode. Der Code für ein Projekt, eine App oder Softwarekomponente ist normalerweise in einer Ordnerstruktur oder Strukturansicht organisiert. Ein Entwickler des Teams kann an einem neuen Feature arbeiten, während ein anderer Entwickler einen nicht damit zusammenhängenden Bug durch Änderung des Codes behebt. Jeder Entwickler hat die Möglichkeit, seine Änderungen an unterschiedlichen Stellen der Strukturansicht vorzunehmen.

Versionskontrolle ist eine effektive Lösung für diese Probleme. Jede Änderung jedes Entwicklers wird verfolgt. So werden Konflikte vermieden, selbst wenn mehrere Entwickler gleichzeitig an einem Projekt arbeiten. Änderungen an einem Teil der Software können inkompatibel sein mit Änderungen, die ein anderer Entwickler zeitgleich implementiert. Es muss geordnete Prozesse geben, um solche Inkompatibilitäten ohne Arbeitsunterbrechungen für das restliche Team identifizieren und beheben zu können. Und natürlich gilt für jedes Softwareentwicklungsprojekt: Jede Änderung kann neue Bugs mit sich bringen und neue Software ist erst zuverlässig, wenn sie getestet wurde. Tests und Entwicklung einer neuen Version laufen also parallel, bis sie bereit zur Veröffentlichung ist.

Eine gute Versionskontrollsoftware ergänzt den Workflow eines Entwicklers optimal, zwingt ihm aber keinen bestimmten Arbeitsstil auf. Im Idealfall unterstützt sie jede Plattform und erfordert weder ein bestimmtes Betriebssystem noch eine bestimmte Toolkette. Ein exzellentes Versionskontrollsystem ermöglicht kontinuierliche und reibungslose Codeanpassungen ohne frustrierende und mühsame Dateisperrungen. Alle Entwickler eures Teams können parallel arbeiten; keiner muss auf den anderen warten.

Softwareteams, die keine Form von Versionskontrolle verwenden, haben häufig mit Problemen zu kämpfen. Sie wissen beispielsweise nicht, welche Änderungen den Benutzern verfügbar gemacht wurden, oder es wurden inkompatible Änderungen an unzusammenhängenden Aufgaben vorgenommen, die mit Mühe in Ordnung gebracht und überarbeitet werden müssen. Wenn du ein Entwickler bist, der noch eine Versionskontrolle verwendet hat, hast du vielleicht deinen Dateien Versionen hinzugefügt und etwa das Suffix "final" oder "aktuell" angehängt, um dann hinterher erneut an der neuen finalen Version zu arbeiten. Vielleicht hast du schon mal Codeblocks auskommentiert, weil du bestimmte Funktionen deaktivieren möchtest, ohne den Code zu löschen, den du später noch brauchen könntest. Die Versionskontrolle ist ein Weg, diese Probleme zu umgehen.

Versionskontrollsoftware ist heute ein essenzielles Tool im Arbeitsalltag jedes professionellen Softwareentwicklungsteams. Viele Softwareentwickler, die sich während Teamprojekten an ein leistungsfähiges Versionskontrollsystem gewöhnt haben, empfinden Versionskontrolle später auch bei eigenen kleineren Projekten als extrem nützlich. Sind die umfassenden Vorteile eines solchen Systems erst einmal ein fester Bestandteil ihres persönlichen Arbeitsstils geworden, möchten viele sie nicht mehr missen, auch nicht bei Projekten ohne Softwarebezug.

Vorteile von Versionskontrollsystemen

Softwareentwicklung ohne Versionskontrolle ist ein riskantes Unterfangen – ebenso gefährlich wie das Fehlen von Backups. Außerdem können Entwickler dank Versionskontrolle schneller arbeiten. Softwareteams bleiben effizient und agil, auch wenn neue Entwickler hinzustoßen.

In den letzten Jahrzehnten haben sich die Versionskontrollsysteme (VCS, Version Control Systems) allgemein deutlich verbessert. Dennoch sind einige Systeme leistungsfähiger als andere. Gelegentlich werden VCS auch als SCM-Tools (Source Code Management, Quellcodeverwaltung) oder RCS (Revision Control Systems, Revisionskontrollsysteme) bezeichnet. Eines der derzeit beliebtesten VCS-Tools ist Git. Git ist ein verteiltes VCS und gehört damit zur Kategorie der DVCS ("D" vom englischen Begriff "distributed" für "verteilt"). Wie viele der heute am häufigsten verwendeten VCS-Systeme ist es kostenlos und quelloffen. Unabhängig von der Bezeichnung und dem gewählten System sind die Hauptvorteile der Versionskontrolle jedoch immer dieselben:

  1. Ein umfassender Verlauf der langfristigen Änderungen für jede Datei. Darin sind alle Änderungen enthalten, die im Verlaufe der Jahre von vielen Personen vorgenommen wurden. Zu den Änderungen zählen die Erstellung und Löschung von Dateien sowie die Bearbeitung ihrer Inhalte. Verschiedene VCS-Tools unterscheiden sich darin, wie einfach die Umbenennung und das Verschieben von Dateien ist. Dieser Verlauf sollte auch den Autor, das Datum und Notizen zum Zweck jeder Änderung enthalten. Wenn der vollständige Verlauf verfügbar ist, ist eine Rückkehr zu früheren Versionen möglich, um bei der Ursachenanalyse von Bugs zu helfen. Dies ist außerdem wichtig, wenn Probleme in älteren Softwareversionen behoben werden müssen. Wenn mit der Software aktiv gearbeitet wird, kann fast alles als "ältere Version" aufgefasst werden.

  2. Branching und Merging Dass Teammitglieder gleichzeitig an etwas arbeiten können ist ja selbstverständlich. Aber auch Einzelpersonen können von der Möglichkeit profitieren, an unabhängigen Streams mit Änderungen zu arbeiten. Die Erstellung eines Branch in VCS-Tools hält mehrere Arbeitsströme voneinander getrennt und bietet eine Möglichkeit, diese Arbeit wieder zu mergen. Dadurch können Entwickler sicherstellen, dass die Änderungen auf jedem Branch keine Konflikte hervorrufen. Viele Softwareteams nutzen das Branching für jedes Feature oder auch Branching für jedes Release oder beides. Es gibt viele verschiedene Workflows, die den Teams zur Verfügung stehen, wenn sie Branching- und Merging-Einrichtungen in VCS nutzen möchten.

  3. Traceability. Being able to trace each change made to the software and connect it to project management and bug tracking software such as Jira, and being able to annotate each change with a message describing the purpose and intent of the change can help not only with root cause analysis and other forensics. Having the annotated history of the code at your fingertips when you are reading the code, trying to understand what it is doing and why it is so designed can enable developers to make correct and harmonious changes that are in accord with the intended long-term design of the system. This can be especially important for working effectively with legacy code and is crucial in enabling developers to estimate future work with any accuracy.

Natürlich ist Softwareentwicklung ohne Versionskontrolle durchaus möglich. Eine solche Entscheidung bedeutet jedoch ein enormes Risiko für ein Projekt – ein Risiko, das ein professionelles Team nicht eingehen sollte. Die Frage ist also nicht, ob du und dein Team mit Versionskontrolle arbeiten sollen, sondern für welches Versionskontrollsystem ihr euch entscheiden solltet.

There are many choices, but here we are going to focus on just one, Git. Learn more about other types of version control software

Du möchtest mit Git arbeiten?

Sieh dir dieses interaktive Tutorial an.

Jetzt loslegen