Versionskontrollsoftware
Auf dieser Seite finden Sie nützliche Informationen über Versionskontrollsoftware. Lesen Sie über Vor- und Nachteile der gängigsten Tools.
Was ist Versionskontrollsoftware?
Versionskontrollsoftware (VCS) ist ein Werkzeug, das Änderungen an einer Gruppe von Dateien über die Zeit aufzeichnet, sodass Sie jede frühere Version abrufen, nachvollziehen können, wer was geändert hat, und die Arbeit vieler Personen zusammenführen können, ohne sich gegenseitig zu überschreiben. Sie ist das Rückgrat jedes kollaborativen Software-Workflows und unerlässlich, sobald mehr als eine Person an einer Codebasis arbeitet.
Diese Seite erläutert die zwei Familien von Versionskontrollsoftware, stellt die bekanntesten Tools und ihre Kompromisse vor und hilft Ihnen zu entscheiden, welches für Ihr Projekt geeignet ist. Wenn Sie zuerst das zugrunde liegende Konzept verstehen möchten, lesen Sie Versionskontrollsystem; um zu verstehen, warum sich Git durchgesetzt hat, lesen Sie Was ist Git.
Zentralisiert vs. verteilt
Fast jedes VCS fällt in eine von zwei Architekturen, und der Unterschied prägt alles andere.
- Zentralisiert (CVCS): Ein einzelner Server enthält die maßgebliche Historie. Clients checken eine Arbeitskopie aus und committen direkt auf diesen Server zurück. Beispiele: CVS, SVN. Der Vorteil ist eine eindeutige Quelle der Wahrheit und eine einfache Zugriffskontrolle; der Nachteil ist, dass Sie für einen Commit Netzwerkzugang benötigen und der Server ein Single Point of Failure ist.
- Verteilt (DVCS): Jeder Klon ist eine vollständige Kopie des gesamten Repositorys, einschließlich aller Historie. Sie committen, verzweigen und sehen die Historie lokal und offline ein, und synchronisieren dann mit anderen, wenn Sie bereit sind. Beispiele: Git, Mercurial, Monotone. Dadurch werden die meisten Operationen sofort ausgeführt und der Single Point of Failure entfällt, allerdings auf Kosten eines etwas steileren mentalen Modells.
Das verteilte Design von Git ist der Hauptgrund, warum Branching und Commits sich sofort anfühlen — es gibt keinen Roundtrip zu einem Server. Jeder Klon, den Sie mit git clone erstellen, enthält bereits die vollständige History des Projekts.
Weit verbreitete Tools
Git
Git ist heute das De-facto-Standard-System zur verteilten Versionskontrolle. Es ist schnell, effizient und bewältigt Projekte jeder Größe. Seine besonderen Stärken sind kostengünstiges lokales Branching (siehe git branch), einen komfortablen Staging-Bereich (siehe git add) und die Unterstützung vieler Workflows. Es ist freie, Open-Source-Software.

Einschränkungen. Die Unterstützung für große Binärdateien ist standardmäßig schwach — obwohl Git LFS dieses Problem behebt. Operationen können bei sehr großen Repositories mit langen Historien langsamer werden, und die Vielzahl an Befehlen kann für Einsteiger überwältigend wirken.
CVS
CVS (Concurrent Versions System) ist ein zentralisiertes System, das historisch beliebt war, heute aber weitgehend veraltet ist und von modernen verteilten Tools abgelöst wurde. Es zeichnet die Historie von Dateien und Dokumenten auf und läuft auf nahezu jeder Hardware-Plattform und jedem Betriebssystem. Es ist freie, Open-Source-Software.

Einschränkungen. CVS überprüft die Integrität des Repositorys nicht und verfügt nicht über atomare Commits, Merge-Tracking oder signierte Revisionen — Mängel, die seine Nachfolger direkt motivierten.
SVN
SVN (Apache Subversion) ist ein zentralisiertes Versionskontrollsystem, das in den 2000er Jahren weit verbreitet war und in einigen Unternehmens- und Legacy-Umgebungen noch immer zu finden ist. Zu seinen Funktionen gehören versionierte Verzeichnisse, atomare Commits, Merge-Tracking, erstklassige Kopier-/Verschiebe-/Umbenennungs-/Löschoperationen, ein Client-Server-Modell, frei formatierte versionierte Metadaten, vollständige MIME-Unterstützung und Dateisperrung. Es ist freie, Open-Source-Software.

Einschränkungen. Dateiänderungszeiten werden nicht gespeichert, die Normalisierung von Dateinamen kann plattformübergreifend problematisch sein, und es gibt keine Unterstützung für signierte Revisionen.
Mercurial
Mercurial ist ein verteiltes Versionskontrollsystem, das größtenteils in Python geschrieben ist. Es ist schnell, unterstützt Projekte jeder Größe und hat eine nachweislich vorhersehbare, leicht erlernbare Benutzeroberfläche. Es läuft auf Unix-ähnlichen Systemen, Windows und macOS, verarbeitet Binärdateien gut und bietet starkes Merging und Branching. Es ist freie, Open-Source-Software.

Einschränkungen. Python ist für alle Add-ons erforderlich, partielle Check-outs werden nicht unterstützt, und der Umgang mit Drittanbieter-Erweiterungen ist nicht immer zufriedenstellend.
Monotone
Monotone ist ein verteiltes Versionskontrollsystem, das in C++ geschrieben ist. Es ist ein einzeldateibasiertes, transaktionales VCS, das vollständig getrennte Operationen, verlaufssensitives Merging, leichtgewichtige Branches, geringen Wartungsaufwand und Peer-to-Peer-Synchronisierung bietet. Es läuft auf Linux, Solaris, macOS, Windows und anderen Unix-Systemen. Es ist freie, Open-Source-Software.

Einschränkungen. Ohne HTTP-Unterstützung können Benutzer nicht hinter einem Proxy auschecken oder committen, und einige Operationen — insbesondere der erste Pull — haben Leistungsprobleme. Monotone ist heute weitgehend aufgegeben und hat nur begrenzte moderne Relevanz.
Schnellvergleich
| Tool | Architektur | Status | Herausragende Stärke | Hauptschwäche |
|---|---|---|---|---|
| Git | Verteilt | Industriestandard | Geschwindigkeit, Branching, Ökosystem | Große Binärdateien, Lernkurve |
| Mercurial | Verteilt | Gepflegt, Nische | Vorhersehbar, einfache Oberfläche | Kleineres Ökosystem |
| SVN | Zentralisiert | Legacy / Enterprise | Dateisperrung, einfaches Modell | Server für Commit erforderlich |
| CVS | Zentralisiert | Veraltet | Historische Bedeutung | Keine atomaren Commits oder Integritätsprüfungen |
| Monotone | Verteilt | Weitgehend aufgegeben | Starkes Integritätsmodell | Kein HTTP, langsamer erster Pull |
Welches sollten Sie wählen?
Für nahezu jedes neue Projekt lautet die Antwort Git: Es hat die größte Community, die beste Hosting-Unterstützung (GitHub, GitLab, Bitbucket) und das tiefste Tooling. Greifen Sie nur dann auf eine Alternative zurück, wenn Sie durch eine konkrete Anforderung dazu gezwungen werden:
- Mercurial — wenn Ihr Team einen kleineren, konsistenteren Befehlssatz bevorzugt und Sie nicht an das Git-Ökosystem gebunden sind.
- SVN — wenn Sie eine strikte Dateisperrung für nicht zusammenführbare binäre Assets benötigen oder einen bestehenden zentralisierten Workflow pflegen.
- CVS / Monotone — im Allgemeinen nur bei der Pflege eines bestehenden Legacy-Repositorys; für neue Projekte vermeiden.
Sobald Sie sich für Git entschieden haben, ist der nächste Schritt, es zu installieren und zu lernen, wie Quellcodeverwaltung in der Praxis funktioniert.