Bazaar ist ein von Canonical, dem Sponsor von Ubuntu, entwickeltes System zur Versionsverwaltung von Dateien. Damit ist es eine Alternative zu Programmen wie Subversion. Bazaar gehört zum GNU-Projekt. Eingesetzt wird es derzeit vor allem bei Launchpad.
Bazaar gehört zur Klasse der verteilten Versionskontrollsysteme. Jeder kann eine eigene Arbeitskopie (einen Branch, auf englisch etwa Abzweig) auf seinem Computer haben, die er verändern kann, wie er will und braucht dabei keine Verbindung zu einem zentralen Server. Ist die Arbeit getan, kann man die Änderungen veröffentlichen oder sie mit einem anderen Branch zusammenführen.
Bazaar wird meistens über Befehle in einem Terminal [2] bedient, es existieren aber auch grafische Benutzeroberflächen.
Zuerst sollte man Bazaar den eigenen Namen mitteilen. Dazu dient folgendes Kommando:
bzr whoami "Peter Silie <peter.silie@gmail.com>"
Üblicherweise wird der eigene Name und die eigene E-Mail-Adresse verwendet, aber es kann auch eine beliebige Zeichenkette angegeben werden. Diese Angabe wird beispielsweise beim Erstellen von Revisionen verwendet, um deren Autor zu identifizieren. Mit
bzr whoami
Peter Silie <peter.silie@gmail.com>
kann man sich den Namen anzeigen lassen.
Alle Bazaar-Aktionen sind durch eine Befehlszeile wie bzr [Befehl] [Parameter] zu erreichen. Eine Liste aller Befehle kann man mit
bzr help commands
erhalten. Hilfe zu einzelnen Befehlen erhält man mit:
bzr help Befehl
Mit folgenden Befehlen erzeugt man einen neuen Branch:
mkdir mein-projekt cd mein-projekt bzr init
Im Verzeichnis mein-projekt wird dabei ein verstecktes Unterverzeichnis mit dem Namen .bzr erstellt. In diesen Verzeichnis wird von Bazaar die gesamte Versionsgeschichte gespeichert.
Für ein größeres Projekt wird man wahrscheinlich mehrere Branches des Projektes haben wollen. In diesem Fall empfiehlt es sich, ein Repository zu erstellen, das die Versionsgeschichte aller Branches enthält:
mkdir mein-projekt cd mein-projekt bzr init-repo mkdir trunk cd trunk bzr init
"trunk" ist üblicherweise der Name des Hauptentwicklungszweiges eines Projektes. Einen weiteren Branch kann man erstellen, indem man im Verzeichnis mein-projekt den folgenden Befehl ausführt:
bzr branch trunk feature
Um fremde Projekte zu bearbeiten, kann man folgende Vorgehensweise verwenden:
bzr init-repo bzr branch ORT_DES_PROJEKTES trunk bzr branch trunk bugfix12345
In dem Verzeichnis trunk behält man den unveränderten Hauptentwicklungszweig des Projektes und im Verzeichnis bugfix12345 kann man dann eigene Änderungen vornehmen.
Sollen nun einige bereits existierende Dateien dem Branch hinzugefügt werden, tippt man das folgende Kommando:
bzr add Datei1 Datei2 Verzeichnis1 ...
Alternativ werden mit einem einfachen
bzr add
alle Dateien dem Branch hinzugefügt, die bisher noch unbekannt sind.
Umgekehrt kann man Dateien aus dem Branch entfernen mit dem Befehl:
bzr remove Datei ...
Bazaar wird Änderungen an diesen Dateien nicht mehr verfolgen. Wenn die Datei wiederhergestellt werden kann, wird sie gelöscht, ansonsten wird eine Sicherungskopie der Datei behalten (mit einer Dateierweiterung wie .~1~, .~2~, ...).
Will man eine Datei umbenennen, verwendet man folgenden Befehl:
bzr mv Alter-Dateiname Neuer-Dateiname
Dadurch wird die Versionsgeschichte unter dem neuen Dateinamen fortgeführt.
Wenn man an einer Datei vorgenommene Änderungen rückgängig machen will, verwendet man:
bzr revert Datei ...
Wird keine Datei angegeben, werden alle Änderungen zurückgenommen. Dabei werden wie bei bzr remove evtl. Sicherungsdateien erstellt.
Hat man, wie im vorigen Abschnitt beschrieben, Änderungen vorgenommen, sollte man diese in einer Revision festhalten. Dazu dient folgender Befehl:
bzr commit
Nun wird der Standard-Texteditor (im Normalfall Nano oder Vim) geöffnet, damit man einen Kommentar, idealerweise eine Zusammenfassung der Änderungen, die man vorgenommen hat, eingeben kann. Ist dies erledigt, wird der Editor nach dem Speichern der Änderungsnotiz wieder geschlossen. Der Befehl
bzr commit -m "Änderungsnotiz"
macht das gleiche, ohne einen Editor zu öffnen und fügt "Änderungsnotiz" als Kommentar ein.
Sollte nun in einer Datei ein Fehler sein und man braucht Zugriff auf eine ältere Version, um weiterarbeiten zu können, kann man mit
bzr revert -r 6 Datei
alle Änderungen, die seit Revision 6 durchgeführt wurden, rückgängig machen. Wird Datei weggelassen, werden alle Dateien und Verzeichnisse auf diese Revision zurückgesetzt.
Der Befehl
bzr status
zeigt die Dateinamen aller neuen, entfernten, geänderten, umbenannten und unbekannten Dateien an.
Der Befehl
bzr diff Datei ...
zeigt die Änderungen der angegebenen Dateien an. Wird keine Datei angegeben, werden alle Änderungen angezeigt. Mit diesem Befehl kann man ebenso die Änderungen zwischen zwei Branches anzeigen:
bzr diff --old=trunk/ --new=feature123/
Die Versionsgeschichte kann man mit
bzr log
einsehen. Meistens wird man zur Anzeige einen Pager (z.B. less) verwenden oder die Anzeige auf einige Revisionen beschränken. Folgender Befehl zeigt die letzten drei Revisionen an:
bzr log -r -3..
Der Befehl
bzr info
zeigt verwandte Branches (siehe auch folgenden Abschnitt) und Formate an.
Um Änderungen anderen zugänglich zu machen, verwendet man folgenden Befehl:
bzr push Ziel-Ort
"Ziel-Ort" wird danach zu einem Spiegel des aktuellen Branches und wird meistens die URL eines Servers oder einer Code-Hosting-Plattform sein (siehe auch im Abschnitt Launchpad und Bazaar). Beim ersten Aufruf wird sich der Befehl den Ziel-Ort merken und man kann bei weiteren Aufrufen den Ziel-Ort weglassen.
Die umgekehrte Richtung erfolgt über den Befehl
bzr pull Anderer-Ort
der den aktuellen Branch zum Spiegel eines anderen macht. Da man meistens einen solchen Branch mit "bzr branch Anderer-Ort" erstellt hat, kann man den Ort auch weglassen.
Beachten sollte man bei den beiden Befehlen, dass sie nur dann funktionieren, wenn die beiden Branches sich nicht auseinander entwickelt haben, d.h. wenn der Spiegel Änderungen enthält, die der Original-Branch nicht hat. In so einem Fall muss man die Branches wie im folgenden Abschnitt beschrieben zusammenführen.
Eine andere Möglichkeit, Änderungen zu veröffentlichen, ist eine Merge-Direktive. Der Befehl
bzr send -o mycode.patch
fasst die aktuelle Revision in der Datei mycode.patch zusammen. Diese Datei kann dann mit einer anderen Branch zusammengeführt werden. Wird der Parameter -o weggelassen, wird das Standard-Mail-Programm verwendet, um die Merge-Direktive per E-Mail zu versenden.
bzr merge Anderer-Branch
führt Anderer-Branch und den Branch im aktuellen Verzeichnis zusammen.
Falls Konflikte beim Zusammenführen zweier Branches auftreten, erhält man beim Kommando bzr merge eine Ausgabe wie folgende:
M hello.py Text conflict in hello.py 1 conflicts encountered.
Der Befehl
bzr conflicts
zeigt ebenfalls nochmal eine Liste der Dateien an, in denen Konflikte auftreten. Öffnet man nun eine betroffene Datei, im Beispiel hello.py, sieht diese ähnlich wie folgt aus:
<<<<<<< TREE
print 'Hello World!'
=======
print 'Hello Word!'
name = raw_input('Wie heißt du?')
print 'Hello %s!' % name
>>>>>>> MERGE-SOURCEDiese Datei ist eine Mischung aus den zwei Dateiversionen, die in Konflikt zueinander stehen. Die Datei sollte nun bearbeitet werden, sodass beide Änderungen zusammengeführt werden, wobei die Markierungen <<<<<<<TREE, ======= oder >>>>>>>MERGE-SOURCE natürlich entfernt werden. Dann sollte die Datei etwa so aussehen:
print 'Hello World!'
name = raw_input('Wie heißt du?')
print 'Hello %s!' % nameNun wird ein abschließendes
bzr resolve hello.py
durchgeführt, um Bazaar mitzuteilen, dass die Konflikte behoben wurden.
bzr commit
übernimmt die Änderungen dann.
Weitere Hinweise und andere Möglichkeiten, um Änderungen zusammenzuführen, findet man im Bazaar User Reference
.
Bazaar besitzt ein paar Vereinfachungen, um auf Launchpad
gehosteten Quellcode zuzugreifen. Projekte auf Launchpad erreicht man mit der verkürzten URL lp:projektname. Um beispielsweise auf den Quellcode von Inkscape zuzugreifen, verwendet man den Befehl
bzr branch lp:inkscape
Im Code-Bereich auf Launchpad sind diese Befehle auch immer angegeben.
Für Quellcode, aus dem Ubuntu-Pakete gebaut werden, gibt es weitere Abkürzungen, z.B.:
lp:ubuntu/Paketname: Quellcode der aktuellen Entwicklerversion
oder kurz: ubuntu:Paketname
lp:ubuntu/natty/Paketname: Quellcode in Ubuntu 11.04
oder kürzer: ubuntu:natty/Paketname
oder noch kürzer: ubuntu:n/Paketname
lp:ubuntu/natty-updates/Paketname: Quellcode für Updates in Ubuntu 11.04
oder kürzer: ubuntu:natty-updates/Paketname
Wenn man sich bei Launchpad kostenlos angemeldet hat, hat man damit gleichzeitig die Möglichkeit, eigene Bazaar-Branches zu veröffentlichen. Dazu ist nicht einmal nötig, ein eigenes Projekt zu registrieren, denn man kann auch Benutzern Branches hinzufügen. Diese findet man dann über den Link Code
oben auf der eigenen Benutzerseite
.
Zuerst sollte man Bazaar den eigenen Launchpad-Benutzernamen mitteilen. Das kann man mit folgendem Befehl machen:
bzr launchpad-login Benutzername
Außerdem braucht man einen SSH-Schlüssel, den man auf der Benutzerseite eintragen muss.
Um den eigenen Branch auf Launchpad hochzuladen, verwendet man folgenden Befehl:
bzr push lp:~Benutzername/+junk/Branchname
Man kann zwar auch über die Web-Seite einen Branch registrieren, aber das ist nicht notwendig, da der Befehl automatisch einen neuen Branch erstellt, wenn er noch nicht existiert. In der Launchpad-Hilfe wird das Hochladen eines Branches
auch beschrieben.
Für Bazaar gibt es zahlreiche Erweiterungen
(engl. Plugins). Einige Erweiterungen können einfach aus den offiziellen Paketquellen installiert, andere müssen manuell installiert werden. Die Erweiterungen:
launchpad (Launchpad-Integration)
netrc_credential_store
news_merge (NEWS-Dateien zusammenführen)
bash_completion
sind in Bazaar selbst enthalten. Die Liste der installierten Plugins kann man sich mit
bzr plugins
anzeigen lassen.
Eine unvollständige Liste von installierbaren [1] Erweiterungen:
bzr-builddeb (Bazaar-Befehle für die Verwaltung von Debian-Paketen)
bzr-builder (Bazaar-Branches mittels „Rezepten“ (engl. recipe) kombinieren)
bzr-email (Senden von E-Mails beim Commit)
bzr-git (fügt Bazaar die Fähigkeit hinzu, Git-Repositories zu lesen und schreiben)
bzr-grep (ab Ubuntu 10.10, suchen nach regulären Ausdrücken in Dateien und Revisionen)
bzr-hg (fügt Bazaar die Fähigkeit hinzu, mit Mercurial-Repositories zu arbeiten)
bzr-rebase (Ubuntu 10.04, Bazaar-Befehle zum Neuschreiben der Versionsgeschichte)
bzr-rewrite (ab Ubuntu 10.10, Bazaar-Befehle zum Neuschreiben der Versionsgeschichte)
bzr-stats (zeigt an, welche Personen mitgearbeitet haben)
bzr-svn (fügt Bazaar die Fähigkeit hinzu, Subversion Branches zu lesen und Commits zu machen)
bzrtools (einige nützliche Bazaar-Befehle)
Als Beispiel soll die Erweiterung htmllog
installiert werden, welche ein zusätzliches Kommando bzr htmllog bereitstellt, welches die Ausgabe von bzr log als HTML-Datei formatiert abspeichert. Als erstes muss der Quelltext heruntergeladen werden, in diesem Fall aus einen Bazaar-Branch:
bzr branch http://michael.ellerman.id.au/bzr/plugins/htmllog/
Es wird ein Verzeichnis namens htmllog erstellt, das den Python-Quelltext der Erweiterung enthält. Dieses Verzeichnis kopiert man nach ~/.bazaar/plugins (wenn dieses Verzeichnis noch nicht existiert, muss man es vorher noch erstellen). Um Erweiterungen systemweit zur Verfügung zu stellen, kann man die Erweiterung auch in das plugins-Unterverzeichnis der Bazaar-Installation kopieren, welches man mit dem Befehl
bzr version | grep 'bzrlib:'
herausfinden kann. Unter Ubuntu 11.04 lautet das Verzeichnis /usr/lib/python2.7/dist-packages/bzrlib/plugins.
Um die Erweiterung zu deinstallieren, löscht man einfach den angelegten Ordner.
Die folgende Tabelle enthält eine unvollständige Liste von nützlichen Bazaar-Befehlen.
| Befehl | Beschreibung | Erweiterung | Paket |
branches | Durchsuche den angegebenen Ort nach Branches | bzrtools | bzrtools |
cat | Den Inhalt einer Datei in der angegebenen Revision anzeigen | – | – |
cdiff | Eine farbige Version des diff-Befehls | bzrtools | bzrtools |
check | Den Branch überprüfen | – | – |
clean-tree | Unbekannte Dateien entfernen | – | – |
config | Einstellungen anzeigen oder ändern | – | – |
deleted | Dateien anzeigen, die entfernt wurden | – | – |
ignore | Dateien von der Versionsverwaltung ignorieren, es können auch Muster angegeben werden wie *.class | – | – |
ignored | Dateien anzeigen, die von der Versionsverwaltung ignoriert werden | – | – |
import | Dateien aus einem Verzeichnis oder einem (komprimierten) Archiv importieren | – | – |
launchpad-open | Die Launchpad-Seite eines Branches im Webbrowser öffnen | launchpad | – |
ls | Dateien auflisten | – | – |
missing | Anzeigen von Revisionen, die im Vergleich zu einem anderen Branch noch nicht vorhanden sind | – | – |
nick | Den Nicknamen eines Branches anzeigen oder ändern, standardmäßig wird der Verzeichnisname verwendet | – | – |
patch | Einen Patch anwenden | bzrtools | bzrtools |
renames | Umbenannte Dateien anzeigen | – | – |
revno | Die aktuelle Revisionsnummer anzeigen | – | – |
shell | Eine interaktive Bazaar-Shell starten, man spart sich die Eingabe von bzr vor jedem Befehl | bzrtools | bzrtools |
tag | Einen Tag für eine Revision erstellen oder bearbeiten | – | – |
tags | Tags anzeigen | – | – |
uncommit | Die letzte Revision entfernen | – | – |
version | Die Versionsnummer von Bazaar anzeigen lassen | – | – |
Bazaar Explorer
ist eine grafische Oberfläche, die auf Qt basiert und QBzr verwendet. Sie kann über folgendes Paket installiert [1] werden:
bzr-explorer
Das Programm kann über "Anwendungen -> Entwicklungswerkzeuge -> Bazaar Explorer" oder mit dem Befehl
bzr explorer
gestartet [3] werden.
Das Paket bzr-gtk [1] beinhaltet hauptsächlich Dialoge für die wichtigsten Aufgaben, die bei der Arbeit mit Bazaar anfallen. Unter anderem gibt es ginit, gbranch und gcommit. Besondere Aufmerksamkeit verdient gpreferences, mit dem Bazaar konfiguriert werden kann. Alle Dialoge werden genauso aufgerufen wie normale Bazaar-Aktionen, z.B.:
bzr gpreferences
Die zur Verfügung stehenden Befehle können mit
bzr help commands | grep gtk
angezeigt werden.
Auf der anderen Seite gibt es auch noch QBzr
, eine Oberfläche, die auf Qt basiert. QBzr kann über das Paket qbzr installiert werden [1].
Einzelne Aktionen können, ähnlich wie bei bzr-gtk, mit einer grafischen Benutzeroberfläche ausgeführt werden. Es wird allerdings das Kommadopräfix q statt g eingesetzt. Die zur Verfügung stehenden Befehle können mit
bzr help commands | grep qbzr
angezeigt werden.
Bis Ubuntu 10.04 beinhaltet das Paket bzr-gtk noch Olive, eine auf GTK basierende Oberfläche für Bazaar, die über den Menüeintrag "Anwendungen -> Entwicklung -> Olive" oder mit dem Befehl
olive-gtk
gestartet [3] werden kann.
Bazaar
offizielle Internetseite von Bazaar
Launchpad
hostet kostenlos Bazaar-Repositories, wenn der Quellcode unter einer Open Source Lizenz steht
Versionsverwaltung
Übersichtsartikel
Diese Revision wurde am 28. Dezember 2011 um 00:32 Uhr
von ubot erstellt.
Dieser Seite wurden folgende Begriffe zugeordnet:
Programmierung, Python
2004 – 2011 ubuntuusers.de • Einige Rechte vorbehalten