Search code examples
version-controldvcsbazaar

Is there a difference between `bzr clone`, `bzr branch` and `bzr checkout`?


Obviously bzr clone, bzr branch and bzr checkout all do the same thing when given an URL as parameter and executed in a non-bzr directory.

Is there any difference for later Bazaar workflow? i.e. bzr commit, bzr update and friends.


Solution

  • Branching and cloning are the same, but branching and checkouts are not the same.

    $ bzr help branch
    ...
    Aliases:  get, clone
    See also: checkout
    

    Looking over the Checkout Tutorial, you'll see that a checkout essentially binds every action you take directly to the branch. So anything you do is essentially pushed when you do it -- obviously that's a huge workflow difference.

    Difference between a Branch and a Checkout

    Let's start by saying there is nothing you can do with a Checkout that you can't do with plain Branches. A Checkout just enables different defaults and workflow helpers.

    What does Checkout do

    With a Checkout, whenever you create new entries in a local Branch, it also creates them in a remote Branch. This corresponds to commands like bzr commit and bzr pull. If you attempt to commit a new changes, and the remote Branch has a different state than the local one, it will prevent you, and let you know that you are out of date. You can use bzr update to apply the remote changes locally.