W3docs

Versionskontrollsystem

Erfahren Sie mehr über Versionskontrolle, die Vorteile von VCS-Tools und die drei Arten von Versionskontrollsystemen mit Infografiken.

Versionskontrollsysteme

Ein Versionskontrollsystem (VCS) zeichnet Änderungen an einer Gruppe von Dateien im Laufe der Zeit auf, sodass Sie jede bestimmte Version später abrufen können. Diese Seite erklärt, was Versionskontrolle ist, warum Softwareteams darauf angewiesen sind, die drei Familien von VCS-Tools (lokal, zentralisiert und verteilt) und die konkreten Vorteile, die jede bietet. Es ist die konzeptionelle Grundlage für alles andere in diesem Buch — wenn Sie erst einmal verstehen, warum Versionskontrolle existiert, ergeben Befehle wie git init, git commit und git branch viel mehr Sinn.

Was ist Versionskontrolle?

Versionskontrolle ist ein System, das Änderungen am Quellcode (oder an einer beliebigen Gruppe von Dateien) aufzeichnet, damit ein Team verwalten kann, wie sich dieser Code im Laufe der Zeit entwickelt. Anstatt Dateien zu überschreiben und den vorherigen Zustand zu verlieren, speichert das System jede bedeutungsvolle Änderung als Revision, zu der Sie zurückkehren können.

Konkret ermöglicht Versionskontrolle Folgendes:

  • Zeitreisen — jede frühere Version einer Datei oder des gesamten Projekts wiederherstellen.
  • Sehen, wer was geändert hat und warum — jede Revision enthält einen Autor, ein Datum und eine Nachricht.
  • Parallel arbeiten — unabhängige Arbeitslinien in Branches aufteilen und sie später mit einem Merge zusammenführen.
  • Versionen vergleichen — die genauen Unterschiede zwischen zwei beliebigen Punkten in der Geschichte mit einem Diff anzeigen.

Warum es wichtig ist

Versionskontrolle ist unverzichtbar, sobald mehr als eine Person — oder mehr als eine Maschine, oder sogar nur Sie selbst über die Zeit — eine Codebasis berührt. Sie ermöglicht es mehreren Entwicklern, separat zu arbeiten, ohne die Arbeit des anderen zu überschreiben, und diese Änderungen dann auf nachvollziehbare Weise zu integrieren. Außerdem verwandelt sie „Ich habe etwas kaputt gemacht und weiß nicht was" in eine beantwortbare Frage: Sie können die genaue Änderung finden, die einen Fehler eingeführt hat, und nur diese Änderung rückgängig machen.

Selbst bei einem Einzelprojekt bietet Versionskontrolle ein Sicherheitsnetz. Sie können frei experimentieren, da Sie wissen, dass jeder funktionierende Zustand gespeichert und wiederherstellbar ist.

Versionskontrollsysteme (VCS)

Ein Versionskontrollsystem (VCS) — auch Source Code Management (SCM) oder Revision Control System (RCS) genannt — ist das Software-Tool, das Versionskontrolle implementiert: Es verfolgt Änderungen, speichert den Verlauf und koordiniert die Zusammenarbeit.

Drei Typen von Versionskontrollsystemen

Historisch gesehen fallen VCS-Tools in drei Familien, von denen jede ein Problem löst, das die vorherige hinterlassen hat.

1. Lokale Versionskontrollsysteme

Ein lokales VCS bewahrt den gesamten Verlauf in einer einfachen Datenbank auf einem einzigen Computer. Es wurde entwickelt, um alltägliche Fehler zu vermeiden, wie das Bearbeiten der falschen Datei oder den Verlust einer früheren Version beim manuellen Kopieren von Verzeichnissen. Eines der beliebtesten lokalen Tools ist RCS (Revision Control System), das heute noch verbreitet ist. RCS speichert Sätze von Patches (die Unterschiede zwischen Versionen), sodass es jede Datei so wiederherstellen kann, wie sie zu einem beliebigen Zeitpunkt aussah.

Die Einschränkung ist offensichtlich: Der Verlauf lebt auf einem Computer, daher bietet er keine echte Zusammenarbeit und keinen Schutz, wenn diese Festplatte ausfällt.

Lokale Versionskontrollsysteme

2. Zentralisierte Versionskontrollsysteme

Ein zentralisiertes VCS (CVCS) speichert alle versionierten Dateien auf einem einzigen zentralen Server, und Clients „checken" Dateien von diesem einen Ort aus. Dies löste das Zusammenarbeitsproblem: Jeder konnte bis zu einem gewissen Grad sehen, was andere taten, und Administratoren hatten einen einzigen Kontrollpunkt. Viele Jahre lang war dies der Standard. Bekannte Beispiele sind CVS, Subversion (SVN) und Perforce.

Der Kompromiss ist der einzelne Ausfallpunkt. Wenn der zentrale Server ausfällt, kann niemand committen oder zusammenarbeiten; wenn seine Festplatte ohne Backup verloren geht, kann der gesamte Projektverlauf damit verloren gehen.

Zentralisierte Versionskontrollsysteme

3. Verteilte Versionskontrollsysteme

In einem verteilten VCS (DVCS) checkt jeder Client nicht nur die neuesten Dateien aus — er spiegelt das Repository vollständig, einschließlich des vollständigen Verlaufs. Wenn der Server ausfällt, kann der Klon eines beliebigen Clients zurückgepusht werden, um ihn wiederherzustellen. Außerdem werden die meisten Operationen dadurch schnell und offline-fähig, da der vollständige Verlauf lokal vorhanden ist. Beispiele sind Git, Mercurial, Bazaar und Darcs.

Dies ist das Modell, das Git verwendet, und deshalb können Sie committen, branchen, den Verlauf anzeigen und Diffs erstellen, ohne eine Netzwerkverbindung zu benötigen. Der Rest dieses Buches behandelt Git ausführlich — beginnen Sie mit Was ist Git? und Git installieren.

Vorteile von Versionskontrollsystemen

Die wichtigsten Vorteile eines VCS sind:

  1. Langfristiger Änderungsverlauf. Jede Erstellung, Änderung und Löschung einer Datei wird über die Lebensdauer des Projekts aufgezeichnet. Dadurch können Sie zu einer früheren Version zurückkehren, um Fehler zu analysieren und Probleme zu beheben.
  2. Branching und Merging. Branching ermöglicht es Entwicklern, unabhängig zu arbeiten, ohne sich gegenseitig zu stören. Merging bringt diese Arbeit wieder zusammen und zeigt etwaige Konflikte auf, damit sie bewusst gelöst werden können.
  3. Nachvollziehbarkeit. Sie können jede Änderung nachverfolgen, sie mit einer Nachricht versehen, die ihren Zweck beschreibt, und sie mit Projektmanagement- und Bug-Tracking-Tools verbinden.

Versionskontrolle in der Praxis

Sie benötigen weder einen Server noch ein Team, um Versionskontrolle in Aktion zu erleben — Git verfolgt den Verlauf direkt auf Ihrem eigenen Computer. Die folgenden Befehle laufen vollständig lokal: Sie erstellen ein Repository, zeichnen zwei Versionen einer Datei auf und fragen Git dann nach dem Verlauf dieser Datei. Probieren Sie sie in einem Terminal aus, nachdem Sie Git installiert haben.

# Create a fresh project and turn it into a Git repository
mkdir vcs-demo && cd vcs-demo
git init -q

# Tell Git who is making the changes (required for a commit)
git config user.email "[email protected]"
git config user.name "You"

# Record the first version
echo "line one" > notes.txt
git add notes.txt
git commit -q -m "Add notes.txt"

# Change the file and record a second version
echo "line two" >> notes.txt
git commit -q -am "Add a second line"

# Ask version control for the history of this file
git log --oneline

Die Ausgabe von git log --oneline listet zwei Revisionen auf, die neueste zuerst — jede mit einem kurzen Commit-Hash und der von Ihnen geschriebenen Nachricht:

3f8a1c2 Add a second line
9b2e4d7 Add notes.txt

(Ihre Hashes werden unterschiedlich sein, da sie aus dem Inhalt und dem Zeitstempel berechnet werden.) Dieser Verlauf ist das Herzstück der Versionskontrolle: Jede Version wird gespeichert, beschriftet und ist wiederherstellbar. Um tiefer einzutauchen, lesen Sie git log und git commit.

Übungen

Übung
Welches der folgenden ist kein Typ eines Versionskontrollsystems?
Welches der folgenden ist kein Typ eines Versionskontrollsystems?
Was this page helpful?