[[Vorlage(archiviert)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Programme_starten: Ein Programm starten] }}} [[Inhaltsverzeichnis()]] [[Bild(./bazaar.png, 64, left)]] Bazaar ist ein von Canonical, dem Sponsor von Ubuntu, entwickeltes System zur [:Versionsverwaltung:] von Dateien. Damit ist es eine Alternative zu Programmen wie [:Archiv/Subversion:Subversion]. Bazaar gehört zum [:GNU:GNU-Projekt]. Eingesetzt wird es derzeit vor allem bei [:Launchpad:]. Bazaar gehört zur Klasse der [wikipedia:Versionsverwaltung#Verteilte_Versionsverwaltung: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-Benutzeroberflaechen grafische Benutzeroberflächen]. Bazaar wird etwa seit 2014 nicht mehr aktiv weiterentwickelt, es gibt nur noch vereinzelte Aktualisierungen. Seit Mai 2017 gibt es von Bazaar ein Fork unter dem Namen [https://www.breezy-vcs.org/ Breezy]. = Installation = Folgendes Paket muss installiert [1] werden: {{{#!vorlage Paketinstallation bzr }}} = Einrichtung = Zuerst sollte man Bazaar den eigenen Namen mitteilen. Dazu dient folgendes Kommando: {{{#!vorlage Befehl bzr whoami "Peter Silie " }}} Ü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 {{{#!vorlage Befehl bzr whoami }}} {{{ Peter Silie }}} kann man sich den Namen anzeigen lassen. = Benutzung = Alle Bazaar-Aktionen sind durch eine Befehlszeile wie "`bzr BEFEHL (PARAMETER)`" zu erreichen. Eine Liste aller Befehle kann man mit {{{#!vorlage Befehl bzr help commands }}} erhalten. Hilfe zu einzelnen Befehlen erhält man mit: {{{#!vorlage Befehl bzr help BEFEHL }}} == Ein neues Projekt erstellen == Mit folgenden Befehlen erzeugt man einen neuen Branch: {{{#!vorlage Befehl mkdir MEIN_PROJEKT cd MEIN_PROJEKT bzr init }}} Im Verzeichnis '''MEIN_PROJEKT''' wird dabei ein verstecktes Unterverzeichnis mit dem Namen '''.bzr''' erstellt. In diesem Verzeichnis werden von Bazaar die gesamte Versionsgeschichte und Metainformationen 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl bzr branch trunk/ NEUER_BRANCH }}} == Arbeitskopien fremder Projekte erstellen == Um fremde Projekte zu bearbeiten, kann man folgende Vorgehensweise verwenden: {{{#!vorlage Befehl 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. == Dateioperationen == Sollen nun einige bereits existierende Dateien dem Branch hinzugefügt werden, tippt man das folgende Kommando: {{{#!vorlage Befehl bzr add DATEI1 DATEI2 VERZEICHNIS1 ... }}} Alternativ werden mit einem einfachen {{{#!vorlage Befehl bzr add }}} alle Dateien dem Branch hinzugefügt, die bisher noch unbekannt sind. Umgekehrt kann man Dateien aus dem Branch entfernen mit dem Befehl: {{{#!vorlage Befehl bzr remove DATEI1 DATEI2 }}} 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: {{{#!vorlage 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: {{{#!vorlage Befehl bzr revert DATEI1 DATEI2 ... }}} Wird keine Datei angegeben, werden alle Änderungen zurückgenommen. Dabei werden wie bei "`bzr remove`" evtl. Sicherungsdateien erstellt. == Versionskontrolle == Hat man, wie im vorigen Abschnitt beschrieben, Änderungen vorgenommen, sollte man diese in einer Revision festhalten. Dazu dient folgender Befehl: {{{#!vorlage 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 {{{#!vorlage Befehl bzr commit -m "Dies ist die Ä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 {{{#!vorlage Befehl bzr revert -r 6 DATEI1 DATEI2 ... }}} alle Änderungen, die seit Revision 6 durchgeführt wurden, rückgängig machen. Wird keine Datei angegeben, werden alle Dateien und Verzeichnisse auf diese Revision zurückgesetzt. == Informationen == * Der Befehl [[Vorlage (Befehl, "bzr status")]] zeigt die Dateinamen aller neuen, entfernten, geänderten, umbenannten und unbekannten Dateien an. * Der Befehl [[Vorlage (Befehl, "bzr diff DATEI1 DATEI2 ...")]] 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: [[Vorlage (Befehl, "bzr diff --old=trunk/ --new=BRANCH2/")]] * Die Versionsgeschichte kann man mit [[Vorlage (Befehl, "bzr log")]] einsehen. Meistens wird man zur Anzeige einen Pager (z.B. [:less:]) verwenden oder die Anzeige auf einige Revisionen beschränken (hilfreich kann dabei auch das Plugin [https://doc.bazaar.canonical.com/plugins/en/pager-plugin.html pager] {en} sein). * Folgender Befehl zeigt die letzten drei Revisionen an: [[Vorlage (Befehl, "bzr log -r -3..")]] * Der Befehl [[Vorlage (Befehl, "bzr info")]] zeigt verwandte Branches (siehe auch folgenden Abschnitt) und Formate an. == Aktualisieren und Veröffentlichen == Um Änderungen anderen zugänglich zu machen, verwendet man folgenden Befehl: {{{#!vorlage Befehl bzr push ZIELORT }}} "ZIELORT" 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 Launchpad und Bazaar]). Beim ersten Aufruf wird sich der Befehl den Zielort merken und man kann bei weiteren Aufrufen den Zielort weglassen. Die umgekehrte Richtung erfolgt über den Befehl {{{#!vorlage 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 {{{#!vorlage Befehl bzr send -o MEINPATCH.patch }}} fasst die aktuelle Revision in der Datei '''MEINPATCH.patch''' zusammen. Diese Datei kann dann mit einem anderen Branch zusammengeführt werden. Wird der Parameter `-o` weggelassen, wird das Standardmailprogramm verwendet, um die Merge-Direktive per E-Mail zu versenden. {{{#!vorlage Hinweis Soll z.B. Zielort später gewechselt werden und soll sich Bazaar die Änderungen merken, nutzt man die Option "`--remember`":[[Vorlage (Befehl, "bzr push NEUER_ZIELORT --remember")]] }}} == Zusammenführen == {{{#!vorlage Befehl bzr merge ANDERER_BRANCH }}} führt '''ANDERER_BRANCH''' und den Branch im aktuellen Verzeichnis zusammen. === Konflikte === 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 {{{#!vorlage 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: {{{#!code python <<<<<<< TREE print 'Hello World!' ======= print 'Hello Word!' name = raw_input('Wie heißt du?') print 'Hello %s!' % name >>>>>>> MERGE-SOURCE }}} Diese 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 `<<<<<<>>>>>>MERGE-SOURCE` natürlich entfernt werden. Dann sollte die Datei etwa so aussehen: {{{#!code python print 'Hello World!' name = raw_input('Wie heißt du?') print 'Hello %s!' % name }}} Nun wird ein abschließendes {{{#!vorlage Befehl bzr resolve hello.py }}} durchgeführt, um Bazaar mitzuteilen, dass die Konflikte behoben wurden. {{{#!vorlage Befehl bzr commit }}} übernimmt die Änderungen dann. {{{#!vorlage Hinweis Weitere Hinweise und andere Möglichkeiten, um Änderungen zusammenzuführen, findet man im [http://doc.bazaar.canonical.com/latest/en/user-guide/resolving_conflicts.html Bazaar User Reference] {en}. }}} = Launchpad und Bazaar = Bazaar besitzt ein paar Vereinfachungen, um auf [launchpad::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 {{{#!vorlage 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/precise/PAKETNAME''': Quellcode in [:Precise Pangolin:Ubuntu 12.04] * oder kürzer: '''ubuntu:precise/PAKETNAME''' * oder noch kürzer: '''ubuntu:p/PAKETNAME''' * '''lp:ubuntu/precise-updates/PAKETNAME''': Quellcode für ''-updates'' in Ubuntu 12.04 * oder kürzer: '''ubuntu:precise-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 [https://code.launchpad.net/people/+me Code] {en} oben auf der eigenen [https://launchpad.net/people/+me Benutzerseite] {en}. Zuerst sollte man Bazaar den eigenen Launchpad-Benutzernamen mitteilen. Das kann man mit folgendem Befehl machen: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl bzr push lp:~BENUTZERNAME/PROJEKTNAME/BRANCHNAME }}} Man kann zwar auch über die Webseite 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 [https://help.launchpad.net/Code/UploadingABranch Hochladen eines Branches] {en} auch beschrieben. = Erweiterungen = Für Bazaar gibt es [http://wiki.bazaar.canonical.com/BzrPlugins zahlreiche Erweiterungen] {en} (engl. ''Plugins''). Einige Erweiterungen können einfach aus den offiziellen Paketquellen installiert, andere müssen manuell installiert werden. Die folgenden Erweiterungen sind in Bazaar selbst enthalten (kann versionsabhängig sein): * bash_completion - Shell Autovervollständigung * changelog_merge - Changelog Dateien zusammenführen * bzr-grep - suchen nach regulären Ausdrücken in Dateien und Revisionen * launchpad - [#Launchpad-und-Bazaar Launchpad-Integration] * netrc_credential_store - '''~/.netrc''' zum Authentifizieren nutzen * news_merge - '''NEWS''' Dateien zusammenführen * po_merge - '''.po''' Dateien zusammenführen * weave_fmt - Unterstützung für Bazaar-Formate vor Version 1.0 Die Liste der installierten Plugins kann man sich mit {{{#!vorlage Befehl bzr plugins }}} anzeigen lassen. == Erweiterungen aus den Ubuntuquellen == 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-cvsps-import''' - bis [:Precise_Pangolin:Ubuntu 12.04], ermöglicht das Importieren von CVS Repositories * '''bzr-dbus''' - ermöglicht Benachrichtigungen über [:D-Bus:] oder lokales LAN * '''bzr-email''' - Senden von E-Mails beim Commit * '''bzr-fastimport''' - ermöglicht Laden von Versionsverwaltungsdatenstrom in Bazaar * '''bzr-git''' - fügt Bazaar die Fähigkeit hinzu, Git-Repositories zu lesen und schreiben * '''bzr-loom''' - ermöglicht Verwaltung von Änderungen über Patches (ähnlich Mercurial Queues) * '''bzr-pipeline''' - ermöglicht einfaches Aufteilen von großen Änderungen in kleine Abschnitte ## * '''bzr-pqm''' - bis [:Precise_Pangolin:Ubuntu 12.04], Senden von E-Mails (Befehlen) an einen PQM (Patch Queue Manager) ## * '''bzr-rewrite''' - [:Precise_Pangolin:Ubuntu 12.04], Bazaar-Befehle zum Neuschreiben der Versionsgeschichte * '''bzr-search''' - Sucherweiterung für Bazaar * '''bzr-stats''' - zeigt an, welche Personen mitgearbeitet haben ## * '''bzr-svn''' - bis [:Precise_Pangolin:Ubuntu 12.04], fügt Bazaar die Fähigkeit hinzu, Subversion Branches zu lesen und Commits zu machen * '''bzr-upload''' - ermöglicht den Upload auf eine Webserver u.a. via FTP * '''bzr-webdav''' - ermöglicht herunter- und hochladen über WebDAV * '''bzr-xmloutput''' - fügt XML-Funktionalität (Formatierungen von Kernfunktionen) hinzu * '''bzrtools''' - Sammlung einiger nützliche Bazaar-Plugins (rspush, graph-ncestry, shell, patch, heads) == Manuelle Installation von Erweiterungen == Als Beispiel soll die Erweiterung [http://michael.ellerman.id.au/bzr/plugins/htmllog/ htmllog] {en} 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 einem Bazaar-Branch: {{{#!vorlage Befehl 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 {{{#!vorlage Befehl bzr version | grep bzrlib }}} herausfinden kann. ##Unter [:Precise Pangolin:Ubuntu 12.04] lautet das Verzeichnis '''/usr/lib/python2.7/dist-packages/bzrlib/plugins'''. Um die Erweiterung zu deinstallieren, löscht man einfach den angelegten Ordner. = Weitere Befehle = Die folgende Tabelle enthält eine unvollständige Liste von nützlichen Bazaar-Befehlen. {{{#!vorlage Tabelle 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. – – }}} = Grafische Benutzeroberflächen = == Bazaar Explorer == [http://doc.bazaar.canonical.com/explorer/en/ Bazaar Explorer] {en} ist eine grafische Oberfläche, die auf Qt basiert und [#QBzr QBzr] verwendet. Sie kann über folgendes Paket installiert [1] werden: {{{#!vorlage Paketinstallation bzr-explorer, universe }}} Das Programm kann über ''"Anwendungen → Entwicklungswerkzeuge → Bazaar Explorer"'' oder mit dem Befehl {{{#!vorlage Befehl bzr explorer }}} gestartet [3] werden. == QBzr == Auf der anderen Seite gibt es auch noch [http://bazaar-vcs.org/QBzr QBzr] {en}, eine Oberfläche, die auf [:Qt:] basiert. QBzr kann über das Paket '''qbzr''' installiert werden. {{{#!vorlage Paketinstallation qbzr, universe }}} Einzelne Aktionen können, ähnlich wie bei [#bzr-gtk bzr-gtk], mit einer grafischen Benutzeroberfläche ausgeführt werden. Es wird allerdings das Kommandopräfix `q` statt `g` eingesetzt. Die zur Verfügung stehenden Befehle können mit {{{#!vorlage Befehl bzr help commands | grep qbzr }}} angezeigt werden. = Links = * [:Versionsverwaltung:] {Übersicht} Übersichtsartikel * [https://bazaar.canonical.com/ Bazaar] {en} offizielle Internetseite von Bazaar * [http://doc.bazaar.canonical.com/bzr.dev/en/ Dokumentation] {en} * [launchpad::Launchpad] {en} hostet kostenlos Bazaar-Repositories, wenn der Quellcode unter einer Open Source Lizenz steht # tag: Versionsverwaltung, Python, nach-trusty-ins-archiv