A little while ago I wrote a quick start guide to branching in Mercurial and, as is normally the case when you don’t actively follow development, Mercurial 1.5 has been released with a lovely new feature which impacts working with branches.
My biggest annoyance when working with branches is by default all branches are pushed/pulled to the remote repository. When in reality, I often want to just push the branch I’m currently on. Mercurial addressed this by adding a branch only option to Push, Pull, Clone, Incoming and Outgoing. To use the branch only option you append –b to the command followed by the branch name, for example:
hg push -b default
This will only push the default branch back to where the repository was cloned from (You can still specify a location to push to if required.) This works exactly the same for all the other commands.
A handy shortcut to push the current branch is use ‘.’ as the branch name:
This will perform the command only to the branch you’re currently on. Since I tend to push more than I do most of the others, I have set up an alias to map push current branch to pc. You can do this by adding a section to your hgrc like:
[alias] pc = push -b .
Branching Without Having It In Your History
Cloning locally has always been an option to create a branch or fork of the code that is still linked to the original code base, IE you can push and pull to it, but it doesn’t become part of your history in the other repo unless you pushed it back. But I’ve never liked it because it takes a copy of everything and sets the current branch to the default branch. Trivial, maybe, but not something I found desirable.
The new branch options makes cloning locally a lot more attractive to me. It means I can just clone a branch, make a quick change or two and either merge it back in or delete the directory and pretend I never had that idea!
Powershell and Mercurial
As part of my continuous improvement I’ve been learning PowerShell. One way I’ve done this is by replacing all my cmd.exe usage with the PowerShell prompt instead. This led me to discover an excellent cmd-let (script or whatever the proper name is, I’m still learning :)) to display the name of the current branch and status of it when you’re in a Mercurial repository. It looks like:
More information can be found about this here.