Collocating repo and checkout

Parth Malwankar parth.malwankar at
Mon Apr 6 15:14:37 BST 2009

On Mon, 06 Apr 2009 13:34:17 +0530, Michael Homer <michael at>  

> Hi,
> For my workflow I find git's in-repository branches handy, and I've been  
> wanting
> to make that same functionality work in Bazaar, which I otherwise  
> prefer. I've
> been looking at writing a plugin to duplicate at least the part of them  
> that I
> find useful. In the course of that I've found an odd trait that seems  
> very
> convenient, but also potentially dangerous.
> The usual multi-branch workflow for Bazaar is to have one shared  
> repository and
> several branches within it, possibly with one of those being a  
> lightweight
> checkout of one of the others. By copying the "branch" and "checkout"
> directories out of that checkout into $repo/.bzr it seems to be possible  
> to
> have Bazaar treat the root of the repository itself as the checkout. The
> treeless branches themselves can then be put somewhere out of the way,  
> such as
> .bzr/local-branches, and you end up with a pretty good approximation of a
> single multi-branch branch. Specifying the paths to switch and merge then
> becomes a pain, but that's where the plugin would wrap things up nicely.
> I have two questions to go with that: firstly, are there any potential  
> pitfalls
> in this setup? Clearly it's a pretty big hack, but as far as I can tell  
> from
> testing things out nothing in Bazaar has a problem with it. Both the  
> checkout
> and the repository go about their business in the ordinary way, without  
> any
> interference from each other. Secondly, since it's not an intentional
> behaviour, is it likely to continue working in the future (so I can base  
> my
> plugin around it)?

There was some work done on git style branch plugin earlier

I haven't tried it personally.


> For clarity, here's a script of how I'm initialising this repository:
> bzr init-repo .
> mkdir -p .bzr/local-branches
> cd .bzr/local-branches
> bzr init trunk
> cd -
> bzr checkout --lightweight .bzr/local-branches/trunk sandbox
> cp -R sandbox/.bzr/{branch,checkout} .bzr
> rm -rf sandbox
> From that point on the root of the repository acts as a checkout, and  
> you can
> create new branches and switch between them without issue. It avoids  
> polluting
> .. with extra directories, which sometimes isn't an option for what I'm
> working on (such as live copies of scripts in the system). Storing the
> repository elsewhere and using a checkout live would also work, but  
> probably
> couldn't be wrapped up in a generic way.
> -Michael

Using Opera's revolutionary e-mail client:

More information about the bazaar mailing list