Bazaar

Bazaar

 




Wiki Tools

  • Find Page
  • Recent Changes
  • Page History
  • Attachments

Introduction

If you are familiar with git then the concepts used by Bazaar will feel familiar, and many commands work in the same way, but there are some fundamental differences that make some operations work differently.

How Bazaar feels the same

Bazaar and git are both distributed version control systems, and so both provide each user with their own version of the code that is standalone, allowing them to work independently of anyone else, and then merge the changes at a later date.

How Bazaar feels different

The fundamental unit in Bazaar is the branch, as opposed to the repository in git. What is called a repository in Bazaar is the storage for revisions, and can be shared between branches, but most command operate at the branch level.

Each branch is a location on the filesystem, so switching branches in Bazaar involves a 'cd' to move yourself to the desired branch, rather than making the branch come to you in git. There are however ways to simulate the git workflow in Bazaar.

There is no index visible at the UI layer in Bazaar. There is no facility for partially staging a commit as there is in git. You can still commit a subset of files, and it is possible to commit a subset of hunks within a file using plugins, but there is no way to stage part of a commit and then continue working.

There are two differences with merging. Firstly bzr pull will only do a fast-forward, if a merge is required it will stop, this is different to git pull which will make a merge commit as required. If you desire this behaviour you can run 'bzr merge --pull' which will fast-forward if possible.

The second differences with merges is that Bazaar requires a commit to be done after every (no fast-forward) merge, regardless of whether there were conflicts. git on the other hand will automatically commit if there are no conflicts.

The left parent ancestor is presented as special in 'bzr log', with non-left hand parents being shown indented to indicate that they were merged in. When working on a project with an identified mainline this will show the perceived flow of changes in the mainline branch. With the commit on every merge policy this means that the flow of changes on this left hand parent history summarises development on other branches that were merged in. These distinction in the log output is only at the UI layer, the underlying model makes no fundamental distinction between parents.

Objects in Bazaar are not sha addressed. Revisions use revision-ids, and files use file-ids. This means that you get rename tracking built in when Bazaar is informed what happened. However you have the that an identical patch merged independently on the same base revision by two people leads to a state that is not considered identical, but will merge cleanly (if no files were added).

Installation

Bazaar is available for http://bazaar-vcs.org.

Distributions

Sources

Setup

Key Concepts

Commands

Common commands

Getting A Branch

One gets fresh copy of a Bazaar branch in the following way:

$ bzr branch BRANCHLOCATION [target directory]

Esoteric commands

Rosetta Stone

Migration