With help from the fantastic folks at CodePlex we're
working to migrate our sourcecode repo from its current
TFS/SVN-compatible storage over to Mercurial. The work should be
complete within a week, so we wanted to give people some lead-time
ahead of it happening.
Umbraco is an open-source project, but the majority of people
never need to see or compile the code for themselves. We provide release builds on CodePlex and via Microsoft's WebPI - so if that's you, don't
worry: this doesn't affect the way you work or how we'll issue
releases. If you're involved with, or just plain interested in the
source-code, read on!
Mercurial explained in three paragraphs
Mercurial (Hg if you're into your Periodic
Table) is a DVCS or Distributed Version Control System.
It's insanely fast for general usage, awesome, and of course
trendy.
It differs from SVN or TFS in that it's not tied to a server for
common operations. In fact, when you have a bunch of code on your
machine managed by Mercurial you also have a hidden database of all
the changeset history. All operations like committing changes,
rolling back, etc. are done entirely locally in that database - so
it's really quick, and works offline.
Once you're ready to share those commits with other
team-members, Mercurial can 'push' those changesets to a shared
location, and likewise you can 'pull' too. That's the major
difference from our previous setup: with a DVCS like Mercurial, the
'master' copy of a repository isn't a controlling server, it's
simply the place which your group agrees they are going to use as
their 'meeting point'. In this case as ever, we're using
CodePlex.
So, if you weren't already, now you're an expert!
Well, sadly the topic is far more involved than I can cover
here. However, we're going to post a few helper articles on blogs
and the Wiki. Hg has a lot of benefits for such a distributed team
as ours, but like any change it has a learning curve - and if
you're not familiar with Mercurial, we want to help out. Aaron has
suggested a Mercurial 101 post, and a guide to submitting patches -
and we'll also be posting a "Collaboration cheat-sheet" soon
too.
But, as ever, please do share any questions or ideas you have
either in the comments or on Our.
The Umbraco Hg repo - what to expect
Migrated history
- The new Hg repo will contain a port of a lot of the history on
Umbraco 4, but with some of the dud folders and branches
removed.
- It will also no longer contain the source-code for Umbraco
version 3.x, since work on this ceased a long time ago.
- Around roughly the same time as the migration, we'll also be
importing our Umbraco 5 codebase into this same store

Branching conventions
What with JUNO (4.6) progressing, and the success of the
4.5 release, we've been aiming to steadily raise the bar for
Umbraco's codebase over the past year. At the HQ and combined with
the brilliant volunteers in the 4.x and 5.x core teams, we want to
make the platform even easier to adopt and more satisfying on which
to collaborate.
One juicy opportunity as part of this switch is to bring our
branching and tagging strategy into line. Anyone who has browsed
the repository in the past will know that it's been tricky to
intuit your way around changesets. Here's how we'll be laying
things out in the new repository:
Mercurial Named Branches: Used
for "lines of development", related to a product version or sprint
sandbox. So we'll have named branches for 4.6.0, 5.0 etc as you can
see in green here.
- Mercurial Tags: Used as release or milestone
markers. So in the 4.6.0 branch you might find a changeset tagged
with "Release-4.6.0" and "Release-4.6.1" a month later. Seen in
yellow here.
With this in mind, you are able to Update your working folder to
a named branch at a particular 'release' tag to get straight to the
right stuff. No more having to browse a combined folder structure
to find your way around. It's not going to be the 100% ideal for
retrospective changesets, but we've come as close to this as
possible and will be sticking to it for 5.0 in the future.
Links to further information
As I said, we'll soon post some Umbraco-specific guides, but in
the meantime, here's some handy resources: