Bazaar vs. Subversion
Mit meinem Umzug von SourceForge.net zu launchpad.net war ich gezwungen, mich in ein neues Versionsverwaltungssystem einzuarbeiten und ich muss sagen, ich habe es nicht bereut. Bazaar ist, im Gegensatz zu SVN, eine verteilte Versionsverwaltung. Das heißt, jeder Entwickler hat einen eigenen branch auf seiner Festplatte, in den er “committen“ kann. Dadurch ist es möglich, die Versionsverwaltung auch dann zu benutzen, wenn mal keinen Zugriff auf den zentralen Server hat. Außerdem kann man auf diese auf diese Weise auch mal einen commit machen, obwohl das Projekt z.B. einen Fehler enthält, sodass es nicht mehr kompiliert werden kann (“build break“), da davon nie das ganze Team betroffen und so die anderen an ihren branches ohne Störung weiterarbeiten können, solange der Fehler nicht in den Hauptzweig “ge-push-t” wird.
Außerdem ist Bazaar Subversion gerade in den Bereichen überlegen, die in SVN in Gefummel ausarten:
- branches: Als integraler Bestandteil von Bazaar sind branches natürlich bestens integriert. Subversion ist wie ein einzelnes, versioniertes Dateisystem aufgebaut. Das Konzept der branches hat man erst später hinzugefügt, indem man für verschiedene branches verschiedene Ordner benutzt (die dann auch den Quellcode mehrfach enthalten).
- tags: Mit den tags verhält es sich ebenso wie mit den branches: in Bazaar versieht man einfach eine Revision mit “
bzr tag <tagname>” mit einem Namen und kann ab diesem Zeitpunkt an allen Stellen, an denen man eine Revisionsnummer angeben muss statt dieser “tag:<tagname>” verwenden. In Subversion benutzt man dafür “svn copy” um eine bestimmte Revision in einen anderen Ordner zu kopieren und dort aufzubewahren (auch hier ist dann der Quellcode mehrfach im Repository enthalten). - Dateien ignorieren: Um eine Datei von der Versionskontrolle auszuschließen, reicht in Bazaar der Befehl “
bzr ignore <filename>“. Ich habe letzten Donnerstag mit einem Kommilitonen bestimmt 10 Minuten gerätselt, wie man mehrere Dateien in Subversion mehrere Dateien ignorieren kann. Der Unterschied: das svn:ignore ist eine Eigenschaft des Ordner, der die Datei enthält. Damit wurde die alte Einstellung immer überschrieben, wenn wir eine neue Datei ignorieren wollten. Des Rätsels Löung hieß “svn propedit svn:ignore <foldername>“. Damit öffnet sich ein Editor, in dem man jede zu ignorierende Datei eintragen muss. (Ja ich weiß, wenn man es weiß, ist es einfach aber intuitiv geht anders.) - svn:special: In Subversion gibt es eine Eigenschaft svn:special, die besagt, dass es sich bei dieser Datei z.B. um einen Softlink handelt. Ich bin mir nicht sicher, ob das anderen auch so geht, aber beim Aufbauen von build-Umgebungen mittels autotools werden einige Softlinks angelegt, die meiner Meinung nach fehl am Platze sind, da die Links in’s Leere zeigen, sobald man eine neue Version von autotools installiert hat. Um diesen Missstand zu beheben, ersetze ich immer die Softlinks durch eine Kopie der Dateien, auf die sie zeigen. In Subversion musste ich sie dazu aus dem Repository löschen und neu hinzufügen oder das Attribut von Hand nachführen – Bazaar erkennt das automatisch.
Bazaar ist unter dem Paradigma der einfachen Bedienbarkeit entwickelt worden. Deshalb wurden auch einige Sachen von SVN übernommen. So heißen die wichtigsten Befehle wie commit (“bzr ci“) und checkout (“bzr co“) genauso wie in Subversion, was besonders Umsteigern zu Gute kommt. Außerdem eignet sich Bazaar besser für kleine Gruppen, in denen man zu zweit oder gar alleine arbeitet, weil man kein zentrales Repository benötigt sondern einfach mit “bzr init” den aktuellen Ordner unter Versionskontrolle stellen und ggf. bequem über bzr+ssh synchronisieren kann.
Allerdings gibt es, wie immer, auch Schatten, wo es Licht gibt:
- Canonical Ltd.: Die Firma, die die Entwicklung von Bazaar finanziert hat, steht nicht gerade in dem Ruf, besonders gut mit der OpenSource-Gemeinde zusammenzuarbeiten, wobei ich die genauen Gründe jetzt nicht weiter erforscht habe.
- Verbreitung: Subversion ist das am weitesten verbreitete Versionsverwaltungssystem. Egal in welche Firma man kommt (jetzt mal aus der Sicht eines Programmierers gemeint
), die Chancen stehen gut, dass man eine erwischt, die Subversion einsetzt. Außerdem kann ich nicht genau sagen, inwieweit sich Bazaar in IDEs wie Eclipse integriert, da ich schon immer die Kommandozeilenvariante verwende…ich weiß, dass es Bazaar auch nativ für Windows gibt, wobei ich auch hier lieber die Cygwin-Kommandozeilen-Version einsetze.
Wie man sicherlich merkt, bin ich ziemlich begeistert von Bazaar. Mit einem Plugin soll es sogar möglich sein, mit Bazaar auf einem SVN-Repository zu arbeiten, aber das habe ich bisher nur zum Importieren von SVN-Repositories in Bazaar benutzt.
Warum hast du bei SourceForge.net nicht einfach svn durch git ersetzt? Was hat dich zu Launchpad gezogen?
^^
Wie kommst du denn auf sowas: “Canonical Ltd.: Die Firma, die die Entwicklung von Bazaar finanziert hat, steht nicht gerade in dem Ruf, besonders gut mit der OpenSource-Gemeinde zusammenzuarbeiten, …”? Warum erwähnst du sowas, wenn du es nicht genau recherchierst? Ich weiß nicht, ob es so ist oder nicht, aber ich hatte das Gefühl, dass Canonical viel für OpenSource macht. Bin nur neugierig.
Hm, ich erwähne das, weil ich dachte, das sei für den einen oder anderen interessant. Da es das für mich nicht ist, habe ich halt nicht weiter recherchiert. Das ist auch nicht weiter schlimm, denn ich bin ja kein Journalist.
Eigentlich sollte es noch einen Artikel “SourceForge vs. launchpad” geben. Allerdings ist das wohl irgendwie untergegangen.
Kurz umrissen: SF ist urst langsam, bietet viele Möglichkeiten, die ich nicht brauche, und war für mich relativ schwierig zu bedienen. Launchpad ist flotter (auch wenn es noch schneller gehen könnte) und bietet genau die Funktionen, die ich brauche, und das Work-Flow-orientiert (oder wie man diese Wortgruppe schreibt). Entscheidend war aber der fehlende Übersetzungseditor bei SF.