Die neue Freiheit bei der Versionskontrolle

Werkzeuge Ekkehard Gentz  –  Kommentare

Auf Vergleiche mit älteren Versionen und automatischer Archivierung möchte kein Softwareentwickler mehr verzichten. Neben einigen proprietären treten zunehmend Open-Source-Systeme für die verteilte Versionskontrolle wie Mercurial und Git in den Fokus der Beobachtung. heise Developer liefert am Beispiel zweier Open-Source-Projekte grundsätzliche Überlegungen zum Einsatz verteilter Versionskontrollsysteme.

Über viele Jahre waren Concurrent Versions System (CVS) und Subversion (SVN) unter den freien Versionskontrollsystemen (Version Control System; VCS) marktbestimmend. Deren Sourcecode-Repository befindet sich auf einem zentralen Server. Das hilft bei Abläufen (Workflows), bringt aber als größten Nachteil mit, dass man Änderungen an den Server nur senden (commit) oder vom Server beziehen (update) kann, wenn man online und der Server erreichbar ist.

Zentraler VCS-Server: Clients müssen online sein (Abb 1).

Vorteile eines Versionskontrollsystems:

  • Mehrere Entwickler arbeiten gemeinsam an Projekten.
  • Alle Änderungen werden protokolliert und lassen sich rückgängig machen.
  • Änderungen kann man zusammenführen.
  • Einzelne Releases werden archiviert.
  • Entwickler können parallel an unterschiedlichen Zweigen (Branches) arbeiten.

Mit einem verteilten Versionskontrollsystem (Distributed Version Control System; DVCS) sind flexiblere Abläufe möglich. Als wichtigste freie Vertreter gelten:

DVCS gesucht

Vor einigen Monaten stand der Autor als Leiter zweier Open-Source-Projekte (redView – riena emf dynamic views –, und red-open), vor der Entscheidung, welches Versionskontrollsystem bei diesen zum Einsatz kommen soll. Dabei waren folgende Kriterien entscheidend:

  • Verfügbarkeit als Eclipse-Plug-in,
  • gute Integration in die Eclipse-IDE und
  • die wichtigsten Abläufe müssen ohne Kommandozeile möglich sein.

Das seit vielen Jahren als Versionskontrollsystem für Eclipse-Projekte genutzte CVS ist gut in die Team-Umgebung integriert. Für die Open-Source-Projekte des Autors kam aber nur ein verteiltes Versionskontrollsystem infrage, da einige Entwickler häufig unterwegs sind und in Zügen oder Gegenden mit schlechter Internetanbindung arbeiten.

Die Auswahl wurde auf Mercurial und Git begrenzt, da sie bereits viele namhafte Projekte einsetzen. Nach der Evaluierung stellte sich heraus, dass beide vergleichbar in den Funktionen und bei der Stabilität sind. Auch bieten beide Versionskontrollsysteme ein Eclipse-Team-Provider-Plug-in an:

  • zum einen hgeclipse – ein Fork von MercurialEclipse, der mittlerweile wieder mit seinem Ursprung zusammengeführt wurde und jetzt als MercurialEclipse verfügbar ist,
  • zum anderen EGit, das Eclipse-Plug-in für die Git-Implementierung in Java (JGit) mit Incubation-Status.

Beide Plug-ins wurden über mehrere Wochen hinweg ausgiebig getestet – und zwar insbesondere in Bezug auf die Frage, ob die Entwickler aus Eclipse heraus ohne Befehlszeile arbeiten können. Denn aus Projektleiter-Sicht ist es wichtig, dass alles aus der GUI heraus möglich ist. Das erleichtert das Verständnis für Entwickler, die bisher bereits mit dem CVS-Team-Provider-Plug-in von Eclipse gearbeitet haben, und es verkürzt die Einarbeitungszeit neuer Team-Mitglieder. Die Ergebnisse meiner Tests und Recherchen sind in einer ausführlichen Blog-Serie festgehalten. Es geht darin unter anderem um Installationsanleitungen für den Einsatz unter Windows, Mac OS X und Linux, Git und Mercurial und ihre Eclipse-Plug-ins im Allgemeinen, SSH-Protokoll (Secure Shell) und das Arbeiten mit lokalen und "remote" Repositories. Des Weiteren um die Verwaltung mehrerer Eclipse-Projekten in einem gemeinsamen Repository sowie einige Tipps und Tricks.

Derzeit ist MercurialEclipse in Version 1.8 verfügbar, und EGit wird seit dem zweiten Service Release von Eclipse Helios als Version 0.11.3 zum Download bereitgestellt. Als mit dem Vergleich der beiden Systeme begonnen wurde, hatte MercurialEclipse einen Vorsprung, da es etwas länger am Markt war als EGit: Mit dem DVCS lassen sich seit Version 1.6 die wichtigsten Abläufe komplett ohne Rückgriff auf die Befehlszeile ausführen. EGit hatte bei der Evaluierung noch einige Schwachstellen, insbesondere wenn es um Merge, Synchronisierung, Rebase und Pull ging. Aber die Weiterentwicklung von EGit geht rasch und intensiv weiter – mittlerweile hat EGit aufgeholt und bietet spätestens seit Ende 2010 einen ähnlichen Leistungsumfang wie MercurialEclipse.