This blog post will describe how our team ended up working with BZR and SVN.
We had to make some changes as the the method described in Bazaar branching strategy with a subversion trunk as this method made branching an expensive operation.
First we created a BZR repository on a shared server and made a branch of the SVN code:
bzr init-repo c:\bzr\SharedRepo cd \bzr\SharedRepo bzr branch svn://localhost/trunk --no-tree
This creates the directory c:\bzr\SharedRepo\trunk with nothing in it apart from the .bzr hidden folder.
If we wanted to work on a branch we would create a no-tree branch from the trunk. This is an incredibly fast operation:
cd c:\bzr\SharedRepo bzr branch trunk feature_branch1 --no-tree bzr branch trunk feature_branch2 --no-tree
This creates the directories c:\bzr\SharedRepo\feature_branch1 and c:\bzr\SharedRepo\feature_branch2, again with nothing in it apart from the .bzr hidden folder.
Now, on our development computers we also create a BZR repository and “connected” to the branches to the shared server:
cd dev bzr init-repo MyRepo cd MyRepo bzr branch \\server\SharedRepo\trunk MyRepo\trunk --no-tree bzr branch \\server\SharedRepo\feature_branch1 MyRepo\feature_branch1 --no-tree bzr branch \\server\SharedRepo\feature_branch2 MyRepo\feature_branch2 --no-tree
We still haven’t actually got the code yet!
The finally step is as follows (and the example below sets us up to work on feature 1)
cd \dev mkdir current bzr checkout MyRepo\trunk trunk bzr checkout MyRepo\feature_branch1 current
Now we can see source code in c:\dev\trunk and c:\dev\current.
We can work on, say, feature 1, commit code locally, push back to the shared server:
....after some dev..... cd c:\dev\current bzr commit -m "My commit comment" bzr push \\server\SharedRepo\feature_branch1 --remember
If we need to switch to working on feature 2:
cd c:\dev\current bzr switch ..\MyRepo\feature_branch2
This will sync c:\dev\current so that it now matches feature_branch2. Any files you have added in feature_branch1 will be removed.
Any files that are in feature_branch2 but not in feature_branch1 will be added. Basically “current” will look like feature_branch2 now.
Once dev is complete and code has been pushed back to the shared server, and you want to merge back into the trunk:
cd c:\dev\trunk bzr merge \\server\SharedRepo\feature_branch2 bzr commit -m "merged feature 2" bzr push \\server\SharedRepo\trunk
Then we can hop onto the shared server and push back to SVN
cd c:\bzr\SharedRepo\trunk bzr push svn://localhost/trunk
The basic rule we observed for the interaction with SVN was to never push to the SVN trunk except from the BZR trunk.