Verwendung von Bazaar Version Control System (VCS) auf Debian Etch

Version 1.0
Author: Falko Timme


Bazaar ist ein verteiltes Version Control System (VCS), das unter GPL verfügbar ist; Es ist ähnlich wie Subversion (svn). Bazaar wird von Canonical, Ltd. protegiert, von der Firma, die die Ubuntu Linux Distribution entwickelt. Daher ist das Ubuntu Projekt der prominenteste Bentuzer von Bazaar. Diese Anleitung erklärt, wie man Bazaar auf einem Debian Etch System einrichtet und anwendet und wie man einen SFTP-/HTTP Server einrichtet, der Deine Bazaar Paketdatenbank hostet.

Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

In dieser Anleitung werde ich die beiden Debian Etch Systeme verwenden:
  • IP Adresse 192.168.0.100: der Arbeitsplatz, auf dem Bazaar installiert und Software entwickelt wird (die von Bazaar gemanagt wird); ich werde die Bezeichnung workstation in dieser Anleitung verwenden, wenn ich mich darauf beziehe;
  • IP Adresse 192.168.0.101: der Server, der die Bazaar Paketdatenbank beherbergt und der SFTP und HTTP Dienste anbietet; ich werde die Bezeichnung server dafür verwenden. Ich verwende hier lighttpd als Web Server, Du kannst aber auch jeden anderen Web Server verwenden (z.B. Apache).
Auf beiden Systemen verwende ich den Benutzernamen falko.

Die meisten Beispiele zur Anwendung von Bazaar stammen von dieser Anleitung: http://doc.bazaar-vcs.org/latest/en/mini-tutorial/index.html, weiterhin erklärt diese Anleitung jedoch auch, wie man SFTP und lighttpd auf dem server und Bazaar auf der workstation installiert, um es für nicht erfahrene Linux Benutzer angenehmer zu gestalten.

2 Installation Von SFTP Und Lighttpd Auf Dem Server

server:

(Alle Schritte in diesem Kapitel müssen als Root Benutzer ausgeführt werden!)

Lass uns SFTP und lighttpd auf dem Server installieren:

apt-get install ssh openssh-server lighttpd

Als Nächstes erstellen wir ein Benutzerkonto - falko in diesem Fall - das die /usr/lib/sftp-server Kommandozeile anstatt der /bin/bash oder jeder anderen Kommandozeile verwendet:

useradd -m -s /usr/lib/sftp-server falko

Damit erstellen wir den Benutzer falko mit dem Home Verzeichnis /home/falko.

Weise falko ein Passwort zu:

passwd falko

Veranlasse dann, dass /usr/lib/sftp-server eine valide Login Shell wird, indem Du es /etc/shells hinzufügst:

echo '/usr/lib/sftp-server' >> /etc/shells

Nun erstelle ich das Verzeichnis /home/falko/public_html was lighttpds Dokumenten-Root sein und unsere Bazaar Paketdatenbank beinhalten wird:

mkdir /home/falko/public_html
chown falko:falko /home/falko/public_html

Um lighttpd mitzuteilen, dass sich der Dokumenten-Root zu /home/falko/public_html geändert hat, öffne /etc/lighttpd/lighttpd.conf und bearbeite die server.document-root Zeile:

vi /etc/lighttpd/lighttpd.conf


[...]
server.document-root = "/home/falko/public_html" [...]
Starte lighttpd danach neu:

/etc/init.d/lighttpd restart


3 Installation Von Bazaar Auf Dem Arbeitsplatz

workstation:

Lass folgenden Befehl als Rootanwender laufen:

apt-get install bzr python-paramiko

Falls Du noch kein normales Benutzerkonto auf Deinem Arbeitsplatz hast, erstelle jetzt eines:

useradd -m -s /bin/bash falko

passwd falko

4 Verwendung Von Bazaar

workstation:

Melde Dich als normaler Benutzer an, oder wenn Du als Root Benutzer angemeldet bist, lass dies laufen

su falko

um normaler Benutzer zu werden (in diesem Fall falko).

Gehe dann zu Deinem Home Verzeichnis:

cd ~

Die folgenden Beispiele stammen mehr oder weniger von http://doc.bazaar-vcs.org/latest/en/mini-tutorial/index.html.

Teile Bazaar zunächst mit, wer Du bist:

bzr whoami "Falko Timme <ft@example.com>"

Überprüfe, ob Bazaar Deine Daten richtig gespeichert hat:

bzr whoami


falko@server1:~$ bzr whoami
Falko Timme <ft@example.com>
falko@server1:~$

Lass uns nun ein Test-Verzeichnis mit einigen Test-Dateien erstellen:

mkdir myproject
cd myproject
mkdir subdirectory
touch test1.txt test2.txt test3.txt subdirectory/test4.txt

Das myproject Verzeichnis ist der Bezugsordner für unser Software Projekt, das wir mit Bazaar verwalten möchten. Es ist wichtig, dass Du alle brz Befehle in diesem Verzeichnis laufen lässt! Wenn Du nicht sicher bist, in welchem Verzeichnis Du Dich befindest, lass Folgendes laufen

pwd

Bazaar muss sich selbst im Projekt Verzeichnis initialisieren:

bzr init

Damit erstellst Du versteckte Dateien, die Bazaar benötigt, um Dein Projekt zu verwalten. Du kannst den versteckten Ordner .bzr im myproject Verzeichnis sehen, wenn Du dies laufen lässt

ls -la


falko@server1:~/myproject$ ls -la
total 16
drwxr-xr-x 4 falko falko 4096 2007-12-19 16:14 .
drwxr-xr-x 4 falko falko 4096 2007-12-19 16:13 ..
drwxr-xr-x 6 falko falko 4096 2007-12-19 16:14 .bzr
drwxr-xr-x 2 falko falko 4096 2007-12-19 16:13 subdirectory
-rw-r--r-- 1 falko falko 0 2007-12-19 16:13 test1.txt
-rw-r--r-- 1 falko falko 0 2007-12-19 16:13 test2.txt
-rw-r--r-- 1 falko falko 0 2007-12-19 16:13 test3.txt
falko@server1:~/myproject$

Lass nun dies laufen

bzr add

um eine Versionshistorie für alle Dateien/Verzeichnisse im myproject Ordner zu erstellen. Die Ausgabe lautet wie folgt:

falko@server1:~/myproject$ bzr add
added subdirectory
added test1.txt
added test2.txt
added test3.txt
added subdirectory/test4.txt
falko@server1:~/myproject$

Füge als Nächstes die Dateien/Verzeichnisse Deinem Zweig hinzu (mit einem kurzen Kommentar, damit Du weißt, worum es geht):

bzr commit -m "Initial import"

Die Ausgabe sieht wie folgt aus:

falko@server1:~/myproject$ bzr commit -m "Initial import"
added subdirectory
added subdirectory/test4.txt
added test1.txt
added test2.txt
added test3.txt
Committed revision 1.
falko@server1:~/myproject$

Lass uns nun die (noch leere) Datei test1.txt bearbeiten:

vi test1.txt


some text...
Lass Folgendes laufen

bzr diff

und Bazaar zeigt Dir die Änderungen an:

falko@server1:~/myproject$ bzr diff
=== modified file 'test1.txt'
--- test1.txt 2007-12-19 15:19:42 +0000
+++ test1.txt 2007-12-19 15:20:39 +0000
@@ -0,0 +1,1 @@
+some text...

falko@server1:~/myproject$

Um die Änderungen zu übertragen (wieder mit einem Kommentar), lass dies laufen

bzr commit -m "Added first line of text"


falko@server1:~/myproject$ bzr commit -m "Added first line of text"
modified test1.txt
Committed revision 2.
falko@server1:~/myproject$

Der Befehl

bzr log

zeigt Dir eine Zusammenfassung der Vorgänge an:

falko@server1:~/myproject$ bzr log
------------------------------------------------------------
revno: 2
committer: Falko Timme <ft@example.com>
branch nick: myproject
timestamp: Wed 2007-12-19 16:22:52 +0100
message:
Added first line of text
------------------------------------------------------------
revno: 1
committer: Falko Timme <ft@example.com>
branch nick: myproject
timestamp: Wed 2007-12-19 16:19:42 +0100
message:
Initial import
falko@server1:~/myproject$

Lass uns nun das Projekt auf Unserem Server veröffentlichen (unter Verwendung von SFTP):

bzr push --create-prefix sftp://falko@192.168.0.101/~/public_html/myproject


falko@server1:~/myproject$ bzr push --create-prefix sftp://falko@192.168.0.101/~/public_html/myproject
The authenticity of host '192.168.0.101 (192.168.0.101)' can't be established.
RSA key fingerprint is 68:fc:30:ab:b1:e0:8d:6b:46:0b:08:cf:a6:34:b3:a1.
Are you sure you want to continue connecting (yes/no)? <-- yes
Warning: Permanently added '192.168.0.101' (RSA) to the list of known hosts.
falko@192.168.0.101's password: <-- enter the user's password
2 revision(s) pushed.
falko@server1:~/myproject$

Nachdem Du das Projekt veröffentlicht hast, kannst Du Deine Arbeitskopie löschen (wenn Du magst - Du kannst sie auch so lassen wie sie ist):

cd ~
rm -fr myproject/


Nun kann jeder eine Kopie Deines Zweigs runterladen. Um dies zu testen, erstellen wir das Verzeichnis test/ und laden eine Kopie des Zweigs in das Verzeichnis:

cd ~
mkdir test/
cd test/
bzr branch http://192.168.0.101/myproject

falko@server1:~/test$ bzr branch http://192.168.0.101/myproject
Branched 2 revision(s).
falko@server1:~/test$

Während Du an Deiner Kopie arbeitest, kann es sein, dass andere Leute ihre Änderungen auf den Server übertragen. Um diese Änderungen in Deiner Arbeitskopie zusammenzufügen, lass dies laufen

cd myproject/
bzr merge

In meinem Fall müssen keine Änderungen zusammengefügt werden:

falko@server1:~/test/myproject$ bzr merge
Merging from remembered location http://192.168.0.101/myproject/
Nothing to do.
falko@server1:~/test/myproject$

Um zu überprüfen was genau sich verändert hat, lass Folgendes laufen

bzr diff

Nun kannst Du Deine Arbeitskopie ändern, z.B.:

vi test1.txt


some text...
bla
Sieh Dir die Änderungen an:

bzr diff


falko@server1:~/test/myproject$ bzr diff
=== modified file 'test1.txt'
--- test1.txt 2007-12-19 15:22:52 +0000
+++ test1.txt 2007-12-19 15:41:37 +0000
@@ -1,1 +1,2 @@
some text...
+bla

falko@server1:~/test/myproject$

Übertrage Deine Änderungen wenn Du fertig bist:

bzr commit -m "Some changes"


falko@server1:~/test/myproject$ bzr commit -m "Some changes"
modified test1.txt
Committed revision 3.
falko@server1:~/test/myproject$

Lade danach die Änderungen auf den Server:

bzr push --create-prefix sftp://falko@192.168.0.101/~/public_html/myproject

Danach kannst Du (wenn Du magst) Deine Arbeitskopie wieder löschen.

Um herauszufinden, was Du noch mit Bazaar anstellen kannst, sieh Dir Folgendes an

bzr help


falko@server1:~/test/myproject$ bzr help
Bazaar -- a free distributed version-control tool
http://bazaar-vcs.org/

Grundbefehle:

bzr init makes this directory a versioned branch
bzr branch make a copy of another branch

bzr add make files or directories versioned
bzr ignore ignore a file or pattern
bzr mv move or rename a versioned file

bzr status summarize changes in working copy
bzr diff show detailed diffs

bzr merge pull in changes from another branch
bzr commit save some or all changes

bzr log show history of changes
bzr check validate storage

bzr help init more help on e.g. init command
bzr help commands list all commands
falko@server1:~/test/myproject$

und

bzr help commands

falko@server1:~/test/myproject$ bzr help commands
bzr add [FILE...]
Add specified files or directories.
bzr annotate FILENAME
Show the origin of each line in a file.
bzr bind LOCATION
Bind the current branch to a master branch.
bzr branch FROM_LOCATION [TO_LOCATION]
Create a new copy of a branch.
bzr break-lock [LOCATION]
Break a dead lock on a repository, branch or working directory.
bzr bundle-revisions [BASE]
Generate a revision bundle.
bzr cat FILENAME
Write a file's text from a previous revision.
bzr check [BRANCH]
Validate consistency of branch history.
bzr checkout [BRANCH_LOCATION] [TO_LOCATION]
Create a new checkout of an existing branch.
bzr commit [SELECTED...]
Commit changes into a new revision.
bzr conflicts
List files with conflicts.
bzr deleted
List files deleted in the working tree.
bzr diff [FILE...]
Show differences in the working tree or between revisions.
bzr export DEST
Export past revision to destination directory.
bzr help [TOPIC]
Show help on a command or other topic.
bzr ignore [NAME_PATTERN]
Ignore a command or pattern.
bzr ignored
List ignored files and the patterns that matched them.
bzr info [LOCATION]
Show information about a working tree, branch or repository.
bzr init [LOCATION]
Make a directory into a versioned branch.
bzr init-repository LOCATION
Create a shared repository to hold branches.
bzr inventory [FILE...]
Show inventory of the current working copy or a revision.
bzr log [LOCATION]
Show log of a branch, file, or directory.
bzr merge [BRANCH]
Perform a three-way merge.
bzr missing [OTHER_BRANCH]
Show unmerged/unpulled revisions between two branches.
bzr mkdir DIR...
Create a new versioned directory.
bzr mv [NAMES...]
Move or rename a file.
bzr nick [NICKNAME]
Print or set the branch nickname.
bzr pull [LOCATION]
Turn this branch into a mirror of another branch.
bzr push [LOCATION]
Update a mirror of this branch.
bzr reconcile [BRANCH]
Reconcile bzr metadata in a branch.
bzr register-branch BRANCH_URL
(From plugin "launchpad")
Register a branch with launchpad.net.
bzr remerge [FILE...]
Redo a merge.
bzr remove [FILE...]
Make a file unversioned.
bzr renames [DIR]
Show list of renamed files.
bzr resolve [FILE...]
Mark a conflict as resolved.
bzr revert [FILE...]
Revert files to a previous revision.
bzr revno [LOCATION]
Show current revision number.
bzr root [FILENAME]
Show the tree root directory.
bzr serve
Run the bzr server.
bzr sign-my-commits [LOCATION] [COMMITTER]
Sign all commits by a given committer.
bzr status [FILE...]
Display status summary.
bzr testament [BRANCH]
Show testament (signing-form) of a revision.
bzr unbind
Unbind the current branch from its master branch.
bzr uncommit [LOCATION]
Remove the last committed revision.
bzr unknowns
List unknown files.
bzr update [DIR]
Update a tree to have the latest code committed to its branch.
bzr upgrade [URL]
Upgrade branch storage to current format.
bzr version
Show version of bzr.
bzr version-info [LOCATION]
Generate version information about this tree.
bzr whoami [NAME]
Show or set bzr user id.
falko@server1:~/test/myproject$

Der Bazaar Benutzerleitfaden ist hier erhältlich: http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/index.html

5 Links