Subversion is great and I have been using it for years. But I keep running into the same two problems over and over:
- I did a bunch of work and I want to commit it, but I don’t have network access.
- I spent a day playing around with a crazy idea, and I want to store my half-finished and buggy work. I don’t want to put it into the trunk because it will break a bunch of other people’s work. I don’t want to make a branch because I find branching and merging again to be tedious.
Both problems could be solved if I could make commits that were local to my hard drive and visible to me only.
Today I spent a few hours on IRC and I found out that bazaar plays really nicely with subversion, and now I have a solution.
- First, I loaded my subversion repository into bazaar. Here’s the command I ran:
bzr branch svn+http://my-svn-repository.example.com/myproj
My subversion repository has 990 revisions. This command took about 3 minutes to finish.
- Then I went into the local myproj directory and edited some code. I used
bzr diffto see what I changed while I worked. They operate nearly identically to their svn counterparts, but
bzr diffhas no
- Committing locally is really simple:
bzr commit -m "This is a local commit and svn won't see it!"
- Then I did some more edits and committed those:
bzr commit -m "OK, now maybe I have something that I want to put into subversion."
- Before committing to the subversion repository, I pulled down other people’s updates to the subversion repository like this:
bzr pull svn+http://my-svn-repository.example.com/myproj
This is a lot like running
- After making sure my stuff plays nice with other people’s updates, I pushed my stuff into subversion:
bzr push svn+http://my-svn-repository.example.com/myproj
- Now when anyone runs svn update in their subversion working copy, they will get my work along with my commit comment.
So far, I’m really happy with this set up. The Bazaar-Subversion FAQ had a lot of really useful tips. Finally, there’s still a lot of stuff I haven’t tried yet, like renaming or copying files with svn.