Versionskontrolleure im Vergleich

02.02.2005
Von Von Bernhard
Tools zur Versionskontrolle sind aus der Softwareentwicklung nicht mehr wegzudenken. Eine Alternative zum Open-Source-Klassiker "CVS" und dem kommerziellen "Perforce" ist das noch junge "Subversion".

Versionskontrollsysteme verwalten die Entwicklungsgeschichte eines Verzeichnisbaums und der darin gespeicherten Dateien. Wenn diese Dateien zu einem Softwareprojekt gehören, spricht man auch gerne von Softwarekonfigurations-Management (SKM).

Beim Konfigurations-Management von Software geht es nicht nur darum, die Versionen einer Quelltextdatei simpel hochzuzählen, sondern verschiedene Konfigurationen eines Projekts zu trennen, konsistent zu speichern und einen beliebigen Stand wiederherstellen zu können. Diese Konfigurationen enthalten neben Quelltext beispielsweise auch binäre Grafik-, Sound-, Symbol- und textuelle Konfigurationsdateien.

Rettungsanker bei Fehlern

Versionskontrollsysteme zeichnen die Historie von Dateiänderungen auf und stellen somit sicher, dass sich alle Änderungen nachvollziehen und wieder zurücksetzen lassen. Sie sind der Rettungsanker, der es erlaubt, die Ursache von fachlichen und technischen Fehlern auch dann zu rekonstruieren können, wenn die beteiligten Entwickler die Änderungen schon längst vergessen haben.

Solche Werkzeuge sind deshalb heute aus der professionellen Softwareentwicklung nicht mehr wegzudenken. Während sich in den letzten Jahren im Microsoft-Umfeld "Visual Source Safe" etabliert hat, dominiert in der Java-Welt vor allem CVS. Zu beiden Produkten gibt es eine Vielzahl von Alternativen, zum Beispiel den CVS-Nachfolger Subversion oder das kommerzielle Produkt Perforce.

Concurrent Version System

CVS steht für Concurrent Version System und ist nicht nur das dominante Versionskontrollsystem in Open-Source-Projekten. Es hat sich im Lauf der Jahre geradezu zu einem Quasistandard unter den Versionsverwaltungen entwickelt. Seine herausragende Stellung verdankt es seiner kostenlosen Verfügbarkeit, seiner Portabilität und nicht zuletzt seiner langen Geschichte. Der Vorläufer, der auf Unix-Shellskripten basierte, geht bis ins Jahr 1986 zurück. 1989 hat Brian Berliner das Versionskontrollsystem neu entworfen, einige der bestehenden Algorithmen übernommen und CVS in der Programmiersprache C neu implementiert. Derzeit ist Version 1.12.11 aktuell, die kostenfrei über die CVS-Homepage heruntergeladen werden kann. Aber das ist oftmals gar nicht notwendig, denn viele Entwicklungswerkzeuge und Linux-Distributionen enthalten CVS ohnehin schon im Lieferumfang.

CVS besitzt wie die meisten derartigen Werkzeuge eine Client-Server-Architektur. Der Server speichert alle zu einem Projekt gehörenden Dateien in einem proprietären Repository, das man sich als Datenbank vorstellen kann. Als Standard-Client wird ein Kommandozeilenwerkzeug mitgeliefert. Wer mit dieser spartanischen Oberfläche nicht arbeiten will, kann auf verschiedene Alternativen zurückgreifen.

Die Clients für CVS

Von diversen anderen Anbietern gibt es Clients mit grafischer Oberfläche. Für Windows sind dies das bekannte "WinCvs" und die Explorer-Erweiterung "TortoiseCVS". Für Linux und andere Unix-Systeme ist "gCvs" verfügbar, und sogar für Mac OS X existiert ein Client, das "MacCvsX". Auch diverse Entwicklungsumgebungen wie Eclipse, Jbuilder und Netbeans haben einen derartigen Client integriert, so dass der Entwickler für Standardaufgaben nicht noch ein weiteres Programm neben seiner Entwicklungsumgebung benötigt.

Der Anwender arbeitet bei CVS nicht online auf dem Repository (Master), sondern wie allgemein üblich auf einer lokalen Arbeitskopie, die er vom Server auschecken muss. Die Bedienung von CVS ist extrem einfach. Wer dennoch Fragen hat, wird mit Dokumentation und Büchern regelrecht überschüttet. Allerdings darf das große Angebot an Literatur nicht darüber hinwegtäuschen, dass bei der praktischen Arbeit oftmals die Grenzen des Werkzeugs erreicht werden.

CVS verwaltet Verzeichnisse als Module. Es speichert jedoch nur die Historie von einzelnen Dateien und nicht den Zusammenhang einer Konfiguration. Gerade bei der Java-Softwareentwicklung löst dies einige Schwierigkeiten aus, da diese Programmiersprache Packages und Klassen auf Verzeichnisse und Dateien abbildet. Werden diese Bäume restrukturiert (Refactoring), geht damit zumeist ein Umbenennen, Verschieben oder Löschen von Teilbäumen und Dateien einher. Dies lässt sich mit CVS nur umständlich umsetzen, da das System für solche Aufgaben überhaupt nicht konzipiert wurde.

Inkonsistenter Projektstand

Zudem ist die Fehlerbehandlung bei Transaktionen nicht optimal gelöst, da CVS keine atomaren Operationen unterstützt. Was das bedeutet, wird deutlich, wenn man eine Reihe von Dateien einchecken will, die logisch zusammenhängen. Weisen eine oder mehrere Dateien Konflikte mit anderen Dateien des Repositories auf, gibt es keinen Abbruch der gesamten Aktion. CVS verweigert also nicht die Annahme der gesamten logischen Einheit, sondern checkt alle Dateien ein, die keinen Konflikt auslösen. Dieses Fehlverhalten verursacht einen inkonsistenten Projektstand, der vom Entwickler mühsam wieder zurückgesetzt werden muss.

Problem Binärdateien

Auch die Unterstützung bei der Archivierung von Binärdateien muss man als mangelhaft bezeichnen. CVS speichert diese immer komplett ab, was dazu führt, dass sich die Repositories schnell aufblähen, wenn viele Grafiken, Symbole oder Sounddateien häufig geändert werden, wie das beispielsweise bei Web- oder Multimedia-Projekten der Fall ist.

Unterm Strich kann man CVS als einfach zu bedienendes, gut dokumentiertes und von vielen Herstellern sowie Entwicklungsumgebungen exzellent unterstütztes Produkt mit einigen nicht übersehbaren Mängeln bezeichnen. Der Einsatz ist heute jedoch nur noch dann zu empfehlen, wenn man den Aufwand scheut, alte CVS-Repositories zu migrieren. Für Einsteiger gibt es gute Alternativen.

Perforce

Beim Versionskontrollsystem Perforce ist der Name Programm. Mit diesem Werkzeug ist der gleichnamige Hersteller angetreten, die oftmals quälenden Zwangspausen des Entwicklers bei der Projektarbeit zu verkürzen. Die kalifornische Firma Perforce wurde 1995 laut Herstellerangaben aus Unzufriedenheit mit bestehenden Versionskontrollsystemen gegründet. Sie nimmt für sich in Anspruch, eines der schnellsten derartigen Versionskontrollsysteme zu produzieren. Prominente Firmen wie SAP und die Deutsche Bank gehören zu ihrem Kundenkreis.

Perforce ist im Gegensatz zu den anderen hier verglichenen Systemen ein kommerzielles Produkt und nur für den nichtkommerziellen Einsatz in Open-Source-Projekten oder Bildungseinrichtungen kostenfrei. Die Preise für den kommerziellen Gebrauch betragen pro Arbeitsplatz 450 bis 700 Dollar - umso weniger, je mehr Anwender lizenziert werden. Zu Testzwecken kann eine Evaluierungsversion für zwei Anwender kostenfrei von der Unternehmens-Homepage geladen werden.

Wie viele Mitbewerber besitzt auch Perforce eine Client-Server-Architektur und verwendet ein Repository zur Speicherung der Daten. Die Versionskontrolle ist für alle wichtigen Betriebssysteme wie Windows, diverse Unix-Derivate und Mac OS X, ja sogar für BeOS verfügbar. Neben einem Kommandozeilen-Client ist mit dem Perforce Visual Client (P4V) auch ein GUI-Client für alle unterstützten Betriebssysteme und mit Perforce Web Client (P4Web) ein Web-Client erhältlich.

Windows-Anwender werden darüber hinaus mit einigen Zugaben verwöhnt. Sie können eine Explorer-Erweiterung namens Perforce Windows Client (P4Win) installieren, der die Verwendung eines weiteren Zusatzprogramms überflüssig macht. P4Win integriert sich so in das Betriebssystem, dass alle wichtigen Operationen vom Explorer aus verfügbar sind. Zum Verschmelzen von Dateien gibt es zudem für Windows-Anwender das Programm Perforce Visual Merge for Windows (P4WinMerge), das kostenfrei auf der Perforce-Homepage erhältlich ist.

Die Integration von Perforce in verschiedene Entwicklungsumgebungen ist breit gefächert, angefangen von Apples Xcode und Borlands Jbuilder über Eclipse und IntelliJ Idea bis hin zu Microsofts Visual Studio. Allerdings führt der Hersteller auf seiner Homepage auch einige Entwicklungsumgebungen auf, die in Bezug zur Versionskontrolle nicht nativ angebunden werden, sondern stattdessen das Plug-in verwenden, das Perforce für Visual Studio entwickelt hat. Dieses basiert auf der von Microsoft publizierten SCC-Schnittstelle seiner Entwicklungsumgebung.

Wie bei CVS ist es auch bei Perforce üblich, nur auf einer lokalen Arbeitskopie zu arbeiten, die aus dem "Depot" genannten Repository ausgecheckt wird. Das Versionskontrollwerkzeug ist wie CVS sehr leicht zu bedienen. Es verfügt über eine sehr gute Dokumentation, wenngleich es mit der Fülle an Büchern, die für CVS erhältlich sind, nicht konkurrieren kann. Perforce unterstützt im Gegensatz zu CVS atomare Commits. Wenn eine Reihe von Dateien eingecheckt werden soll, von denen eine oder mehrere Konflikte auslösen, wird die Annahme des Gesamtpakets so lange verweigert, bis die Konflikte gelöst sind. Das Gleiche gilt bei Netzwerkproblemen während des Commits. Auch hier ist gewährleistet, dass die gesamte Transaktion zurückgesetzt wird und der Master konsistent bleibt.

Auf Geschwindigkeit getrimmt

Perforce ist schnell, was sich vor allem bei sehr großen Mengengerüsten und Massenoperationen deutlich bemerkbar macht - weniger bei kleineren Projekten und Datenmengen. Es speichert - wie die meisten Konkurrenten - aus Platzgründen nur die Differenzen von Textdateien (Deltamethode). Binärdateien behandelt es hingegen anders. Sie werden normalerweise auch bei geringen Differenzen immer komplett gespeichert. Das kann bei häufigen Änderungen an vielen Binärdateien erheblich Speicherplatz kosten. Wer das nicht will, kann den Server auch anweisen, ältere Binärdateien zu überschreiben oder aus dem Repository zu entfernen.

Anders als CVS unterstützt das Werkzeug seit einiger Zeit weitreichende Projektrestrukturierungen, also das Umbenennen und Verschieben von Verzeichnisbäumen sowie deren Dateien, wie sie bei Refactorings üblich sind. Dabei bleibt die Historie erhalten. Die umfassenden Restrukturierungen, wie sie bei Java-Projekten konzeptionell mittlerweile üblich sind, stellen damit kein Problem mehr dar. Diese Funktionen sind allerdings nur über die Kommandozeile oder über die IDE-Plugins (zum Beispiel für Eclipse) verfügbar.

Unterm Strich ist Perforce ein schlankes, leicht zu bedienendes und sehr performantes Werkzeug mit einer guten Unterstützung von Entwicklungswerkzeugen und Betriebssystemen. Es ist vor allem bei Projekten mit hohen Ansprüchen an die Geschwindigkeit zu empfehlen.

Subversion

Seit dem Jahr 2000 arbeiten diverse Firmen, allen voran Collabnet, daran, die erwähnten Mängel von CVS durch einen völlig neu entwickelten Nachfolger mit der Bezeichnung Subversion zu beseitigen. Kürzlich ist Version 1.1.3 dieses Open-Source-Projekts erschienen, das kostenfrei von der Subversion-Homepage herunter geladen werden kann.

Subversion gleicht in vielem rein äußerlich CVS. Es verfügt über eine Client-Server-Architektur und ist ebenfalls in ANSI C geschrieben, nutzt aber die Apache Portable Runtime Library (APR), um größtmögliche Portabilität zu erreichen. Wohl aus diesem Grund gibt es Subver- sion bereits jetzt für eine Viel- zahl von Betriebssystemen wie Windows, Linux, BSD-Unix, Mac OS X und Netware.

Grafische Clients für viele Betriebssysteme sowie eine Erweiterung des Windows-Explorers (TortoiseSVN) sind ebenfalls verfügbar. Ferner unterstützen eine Reihe von Entwicklungsumgebungen wie der neue Jbuilder 2005 schon jetzt Subversion durch einen eingebauten Client oder sind, wie Eclipse 2.1, 3.0 und IntelliJ Idea 3.0, über Plug-ins verwendbar.

Für CVS-Umsteiger konzipiert

Wahrscheinlich aufgrund der guten Unterstützung mit Werkzeugen und grafischen Clients erfreut sich Subversion schon jetzt großer Beliebtheit. Es ist zudem sehr einfach zu bedienen und für die Zielgruppe der CVS-Umsteiger konzipiert: Sowohl Befehle als auch Optionen ähneln denen des Vorbilds. Die Dokumentation kann man ebenfalls als ausgezeichnet bezeichnen. Sogar ein freies 300-Seiten-Buch ist als PDF-Datei über die Subversion-Homepage verfügbar.

Subversion hat die konzeptionellen Mängel von CVS gründlich beseitigt. Es verwaltet Dateien und Verzeichnisse als Ganzes in einer Baumstruktur. Das beim Refactoring übliche Verschieben und Umbenennen von Dateien und Verzeichnissen ist somit anders als bei CVS und Perforce überhaupt kein Problem und unter Beibehaltung der Historie möglich. Auch die Transaktionssicherheit ist vorbildlich gelöst: Subversion garantiert sowohl beim Einchecken einen konsistenten Projektstand als auch beim Auschecken, dass die Arbeitskopie vollständig ist.

Ein weiterer Vorteil gegenüber den Mitbewerbern ist die bessere Unterstützung der Versionierung von Binärdateien. Während diese in CVS und Perforce prinzipiell praktisch in jeder Version komplett gehalten werden, speichert Subversion nur die Differenzen mit Hilfe des Delta-V-Algorithmus ab. Gerade bei Web-, Multimedia- oder Spieleprojekten, in denen viele Grafikdateien zur Konfiguration gehören, macht sich dieses platzsparende Verfahren schnell bemerkbar.

Alles in allem ist Subversion derzeit eines der führenden Versionskontrollsysteme. Es verbindet die Vorteile von CVS wie Schlankheit, Offenheit sowie kostenlose Verfügbarkeit mit Features, die sonst nur bei kommerziellen Mitbewerbern zu finden sind. (ue)