Wiki Tools

  • Find Page
  • Recent Changes
  • Page History
  • Attachments

This document is intended to assist users migrating from GNU Arch or Bazaar 1.x to Bzr, without duplicating the contents of BzrFAQ except where such contents are unusually relevant to users migrating from Baz. It is very much a work in progress. Please take all data here with a large grain of salt.

Underlying changes

  • Bzr, unlike Bazaar 1.x, stores history (i.e. archive) within the working tree; separate archives no longer exist. This is like Darcs, and closer to BitKeeper workflow.

  • Only the execute bit is tracked; other permissions are not versioned, but are retained in the working tree.
  • The backend storage format is more akin to that of BitKeeper or SCCS than that of Arch; see BzrWeaveFormat for a description.

Frontend changes

Command Equivalency

Bazaar 1.x command

Bzr command




See BzrSettingEmail


<delete from filesystem>


shelve/unshelve (see BzrTools) or revert

  • Shelve and unshelve are substantially superior to undo/redo inasmuch as they allow one to remove and re-add individual hunks. However, they lack support for multiple named shelves.
  • For the purpose of undoing a merge, 'revert' is a better choice than shelve, because revert will restore files to their previous name, and clear merge metadata.

Functional changes

  • 'bzr add' is recursive unless told otherwise.
  • There is no built-in config support. There is an external config-manager too, and plans are afoot to support by-reference tree inclusions, which should be even nicer than configs. See NestedTreeSupport for details.

  • Automatic changelog support is gone.

Terminology changes

  • 'Archives' are called 'Repositories'.

Inventory system differences

  • There are several categories:
  • Versioned "source"
  • Unversioned
    • Ignored (like "precious", but can be added)
    • Unknown (somewhat like "untagged-source")
  • Control files

Any unversioned file can be added at any time, immediately making it source. This differs from Arch, where only untagged-source files could be made source. Even ignored files can be added. The difference between 'ignored' and 'unknown' is skin-deep; they only affect UI, not core functionality. Ignored files are not listed by default, and they are not added automatically by recursive-add.

There are no variants, e.g. tagging-method, untagged-source disposition. There are no tagline/implicit tags. Everything is versioned externally (but in .bzr).

Conceptual differences

  • bzr is snapshot-oriented, rather than changeset-oriented.
  • bzr uses locations rather than version names to designate branches.
  • All of a branch's history is stored in its repository, including merges. Branches are self-sufficient.

Merge support

  • Very similar to baz merge
  • supports mesh-merging (i.e. star topology is optional)
  • Diff3-style conflicts, not .rej
  • Various merge variants available
  • remerge command to try different algorithms, even per-file.

Open Questions

This area is intended to hold questions which, when answered, will complement the existing contents of this document.

  • Are any bullet-point features inherited from Arch no longer in Bzr? (ie. ability to reconstruct repository contents using only standard UNIX tools -- may not have been used much if ever, but came up as a bullet-point reassurance-style feature with some frequency).
    • Repositories are no longer nearly-append-only, meaning that the data format is more susceptible to corruption of history, and that highly aggressive caching is potentially more problematic.