Bazaar

DateReadtime 4 minutes Tags

A presentation I gave to the Open Source club as an introduction to Bazaar:

Introduction

Bazaar is a distrubuted revision control system sponsored by Canonical

  • written in python
  • packages for GNU/Linux, Mac OS X, and Windows.
  • FOSS
  • intuitive commands
  • easy to use
  • support for working with other systems
    • git
    • cvs
  • mercurial
  • source code hosting
    • launchpad
    • sourceforge
    • gnu savannah

Install and Setup Bazaar

Install:

sudo apt-get install bzr

Setup:

bzr whoami "Paul <paul@opensource.osu.edu>"

Starting a project

New

Recommended:

bzr init-repo sample
cd sample
bzr init trunk
cd trunk

What I do:

mkdir sample
bzr init

Existing

New branch:

bzr branch mine new

New checkout:

bzr checkout src mine

New 'lightweight' checkout use the --lightweight flag

View Repo Status

To view the status (a list of any changed or added files as well as any shelved items):

bzr status

To view the log:

bzr log

Which will look something like:

$ bzr log
------------------------------------------------------------
revno: 2
committer: John Doe <john.doe@gmail.com>
branch nick: myproject
timestamp: Mon 2007-10-08 17:56:14 +0000
message:
  Added first line of text
------------------------------------------------------------
revno: 1
committer: John Doe <john.doe@gmail.com>
branch nick: myproject
timestamp: Mon 2006-10-08 17:46:22 +0000
message:
  Initial import

To view the differences since last commit:

bzr diff

Optionally you can use:

bzr diff [filename]

to only see the changes of one file. The diff output can be directed to a standard editor. It looks like this:

$ bzr diff
=== modified file 'test1.txt'
--- test1.txt   2007-10-08 17:56:14 +0000
+++ test1.txt   2007-10-08 17:46:22 +0000
@@ -0,0 +1,1 @@
+test test test

Also by default diff compares the file to the most recent commit. To compare to an older version you can use the -r flag which also works for commands like branch:

bzr diff -r 1..3 [filename]

File Manipulation

Adding and Removing

To start "versioning" a file or directory use:

bzr add [path]

To remove or "un-version" a file or directory use:

bzr remove --keep [filename]

That would save the file (not delete it) as opposed to:

bzr remove --force [filename]

Ignoring

To ignore a file use:

bzr ignore [filename]

To list ignored files use:

bzr ignored

Moving, Cat...

To move a file you can use:

bzr mv [old] [new]

This is important because otherwise you would lose the history of a file if you just moved it by normal means. To see the contents of a file in a previous revision you can "cat" the file.

::
bzr cat -r32 [filename]

Version Control

Committing:

bzr commit

bzr commit -m "Message"

bzr commit [filename] -m "Message"
note:if you use "bzr commit" it will open your default editor ($EDITOR)

Uncommitting:

bzr uncommit

If you want to restore the files to the last commit you can revert them:

bzr revert

Another handy tool is shelving. If you make changes to code but don't have time to finish it or decide to go in a different direction you can shelve the changes:

bzr shelve

Merging

To merge two branches:

bzr merge other
bzr commit

Sometimes you may have conflicts that will need fixed:

bzr resolve [filename]

To update a checkout you can simply run:

bzr update

Publishing

Lauchpad

I personally have never used this.

Pushing via ssh

To push code from my laptop to my server I often use the following command:

bzr push bzr+ssh://sarcasm.ath.cx/home/paul/tictac

The same can be done to pull changes from, to lets say, stallman (our club server):

bzr pull bzr+ssh://sarcasm.ath.cx/home/paul/tictac

Another feature of bzr is to 'export' the current revision:

bzr export ../distri

Or as an archive:

bzr export ../distri.tar.gz
bzr export ../distri.tar.bz2
bzr export ../distri.zip

There is also an import to reverse the process:

bzr import ../distri.tar.bz2

Help

The most important part of bzr is the help. Running the command:

bzr help [command]

will tell you additional information about the command. To find a list of commands you can use:

bzr help commands

Lastly just running "bzr help" yeilds:

Bazaar 2.1.4 -- a free distributed version-control tool
http://bazaar-vcs.org/

Basic commands:
  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 send           send changes via email

  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
  bzr help topics    list all help topics