Wie Bazaar das Leben von Entwicklern vereinfacht

Bazaar ist ein verteiles Versionsverwaltungssystem (DRCS - Distributed Revision Control System). Die meisten werden CVS (Concurrent Versions System) oder SVN (Subversion) kennen. Bazaar ist anders und bringt einige nette Ideen mit. Ich habe mich damit in den letzten Tagen etwas genauer beschäftigt und zeige hier in mehreren Artikeln, warum es sich für Entwickler lohnen kann Bazaar zu verwenden und wie man seinen Code mit Bazaar verwaltet. Im diesem ersten Teil geht es darum wie man ein Repository (bzw. Branch) in Bazaar aufsetzt und auf den Server hochlädt.

Das erste was man bei der Benutzung von Bazaar beachten muss ist die andere Sichtweise auf Repository und Arbeitskopie. Bei CVS/SVN hat man ein zentrales Repository sowie eine lokale Arbeitskopie, mit der man arbeitet. Bazaar dreht dieses Prinzip um: Jeder Entwickler hat das Repository auf seinem Rechner und das Repo wird nur auf den Server geladen, um die Änderungen auszutauschen. Dieses Prinzip sollte man verinnerlichen, damit man die Arbeitsweise von Bazaar versteht.

Die Vorteile von Bazaar

Auch wenn sich diese Konzeption von Bazaar etwas merkwürdig anhören mag, hat sie doch einige Vorteile:

  • Man kann lokal arbeiten - eine ständige Verbindung zum Server wird nicht benötigt
    Bei CVS/SVN ist es notwendig für jeden Commit mit dem Server verbunden zu sein, da die Änderungen sofort in das Repository eingespielt werden.
    Bei Bazaar hingegen kann man seine Änderungen lokal durchführen und braucht erst später, wenn man mit seiner Arbeit fertig ist, das ganze auf den Server laden.

  • Jeder kann am Code mitarbeiten
    Bei den meisten Projekten gibt es ein geschlossenes Repository, das zwar jeder auschecken kann aber nur die Maintainer können Commits ausführen, also Änderungen einpflegen. Das führt dazu, dass Außenstehende es schwieriger haben am Code mitzuarbeiten, also bspw. Patches zu schreiben. Sie müssen ihren Code an den Entwickler/Maintainer schicken, der die Änderungen in den Code einfügen muss.
    Bei Bazaar kann ein externer Entwickler seine Änderungen einfach auf seinem Webspace (s.u.) veröffentlichen und den Maintainer darauf aufmerksam machen. Wenn dieser mit den Änderungen zufrieden ist, kann er sie automatisch in sein Repository übernehmen lassen. Damit kann eine Gemeinschaft rund um ein Projekt sehr viel effizienter arbeiten.

  • Es muss kein teurer Server aufgesetzt werden
    Das ist für mich der wichtigste Vorteil gegenüber anderen Versionsverwaltungen: Für CVS/SVN benötigt man einen VServer oder Rootserver. Ein solcher Server ist kostspielig und benötigt zusätzlich Erfahrung in Administration und Wartung. Für Einzelpersonen oder kleinere Projekte ist das meistens zu aufwändig und teuer.
    Mit Bazaar reicht ein einfacher Webspace mit FTP-Zugriff (und genug Platz), um seinen Code für Andere verfügbar zu machen. Entsprechenden Webspace bekommt man schon für 5 bis 10 Euro.

Hinweis: Weil es bei der dezentralen Codeverwaltung von Bazaar kein zentrales Repository gibt, spricht man hier von Branches (Zweigen). Bei Bazaar hat jeder Entwickler das Repository auf seinem Rechner. Repository ist bei Bazaar gleichbedeutend mit Branch.

Einen neuen Branch erstellen und hochladen

Nun zum praktischen Teil. Wie verwendet man Bazaar als Versionsverwaltung für sein Projekt. Ich gehe im Folgenden davon aus, dass das Projekt bisher noch nicht durch ein anderes System wie CVS oder SVN verwaltet wird. (Alle folgenden Befehle werden, soweit nicht anders angegeben, im Terminal ausgeführt)

Falls noch nicht geschehen, muss als allererstes Bazaar auf dem lokalen System installiert werden. Bei Kubuntu lautet der Befehl

sudo apt-get install bzr

Nach der Installation sollte man die eigene Identität festlegen, die später bei Commits angezeigt wird. Mit

bzr whoami

kann man sich die derzeitige Einstellung anzeigen lassen. Dort wird meist der Name sowie als E-Mailadresse der Loginname und der Systemname eingestellt sein, bspw.

Hans Hacker <hans@linuxbox>

Mit dem Befehl

bzr whoami 'NAME <EMAIL>'

kann man die Voreinstellung überschreiben. Für dieses Beispiel würde der Befehl lauten:

bzr whoami 'Hans Hacker <hans.hacker@sourcecode.org>'

Nun geht man in das Verzeichnis, in dem der Quellcode liegt und initialisiert einen Bazaar Branch also beispielsweise

cd mycode
bzr init

Damit ist dieses Verzeichnis bereit von Bazaar verwaltet zu werden. Danach müssen alle Dateien zum Branch hinzugefügt und eine erste Revision erstellt werden:

bzr add
bzr commit -m "my first revion“

Das Kommando bzr add fügt alle unbekannten Dateien, also Dateien, die von Bazaar noch nicht erfasst wurden, zur Versionsverwaltung hinzu. Gibt man eine weitere Datei als Parameter an (bspw. bzr add file.txt) wird nur diese Datei hinzugefügt. bzr commit erstellt eine neue Revision. Mit dem Parameter -m gibt man eine Nachricht an, die zum Log hinzugefügt wird. Wird -m nicht verwendet, öffnet sich automatisch ein Editor, in dem man die Nachricht eingeben kann.

Nun hat man einen neuen Branch erstellt und den ersten Commit ausgeführt. Mit dem Befehl

bzr log

kann man sich die Versionsgeschichte des gesamten Branches ansehen. Wie auch bei bzr add kann man eine Datei als Parameter angeben und sich damit die Versionsgeschichte dieser Datei anzeigen lassen.

Nun wäre man eigentlich fertig. Der Branch ist aufgesetzt, man kann an seinem Code arbeiten. Wenn man allerdings mit mehreren Leuten an einem Projekt arbeitet, den Code der Öffentlichkeit zur verfügung stellen will oder seine Arbeit auf einem Server sichern möchte (Backup), wird es nötig den Branch hochzuladen. Mit dem Befehl

bzr push URL

lässt sich der Branch auf den Server laden. Bazaar versteht sich mit (S)FTP, HTTP und File (lokales Dateisystem). In meinem Beispiel würde der Befehl lauten

bzr push ftp://hans@myftpserver.com/bzr/ --remember

Man kann auch einfach den gesamten Ordner mycode mit einem FTP-Client auf den Server laden (das Verzeichnis .bzr nicht vergessen!). Der Parameter --remember führt dazu, dass sich Bazaar merkt wohin das Projektverzeichnis hochgeladen werden soll. Beim nächsten Upload ist ein bzr push ausreichend.

Im nächsten Teil geht es darum wie man einen Branch vom Server herunterlädt, einen davon abgeleiteten Branch erstellt, Änderungen in seinen Branch einspielt und Konflikte löst.

 

Teil 1: Wie Bazaar das Leben von Entwicklern vereinfacht
Teil 2: Versionsverwaltung mit Bazaar

Trackback URL für diesen Eintrag:

http://www.seqfault.de/de/trackback/13