Further thoughts on version control

Monday, June 11th, 2007

I’ve had quite a lot of positive email feedback on my posting about on renaming as the killer app of distributed version control. So I thought it would be interesting to delve into this subject in more detail. I’ll blog over the next couple of months, starting tomorrow, about the things I think we need from this set of tools – whether they be Git, Darcs, Mercurial, Monotone or Bazaar.

First, to clear something up, Ubuntu selected Bazaar based on our assessment of what’s needed to build a great VCS for the free software community. Because of our work with Ubuntu, we know that what is important is the full spectrum of projects, not just the kernel, or X, or OpenOffice. It’s big and large projects, Linux and Windows projects, C and Python projects, Perl and Scheme projects… the best tools for us are the ones that work well across a broad range of projects, even if those are not the ones that are optimal for a particular project (in the way that Git works brilliantly for the kernel, because its optimisations suit that use case well, it’s a single-platform single-workflow super-optimised approach).

I’ve reviewed our choice of Bazaar in Ubuntu a couple of times, when projects like OpenSolaris and X made other choices, and in each case been satisfied that it’s still the best project for our needs. But we’re not tied to it, we could move to a different one. Canonical has no commercial interest in Bazaar (it’s ALL GPL software) and no cunning secret plans to launch a proprietary VCS based on it. We integrated Bazaar into Launchpad because Bazaar was our preferred VCS, but Bazaar could just as well be integrated into SourceForge and Collab since it’s free code.

So, what I’m articulating here is a set of values and principles – the things we find important and the rationale for our decisions – rather than a ra-ra for a particular tool. Bazaar itself doesn’t meet all of my requirements, but right now it’s the closest tool for the full spectrum of work we do.

Tomorrow, I’ll start with some commentary on why “lossless” tools are a better starting point than lossy tools, for projects that have that luxury.

9 comments:

  1. Zeno Davatz says: (permalink)
    June 11th, 2007 at 11:23 am

    Interesting. As you say, you need a “Renaming” tool witch is maybe not so much an SCM. If you are looking for a Source-Code-Management-Tool, I still believe GIT is the best you can get. But of course GIT is about Code and not about File-Names.

  2. Ed Ad says: (permalink)
    June 11th, 2007 at 2:04 pm

    I second Zeno that GIT is way better for coding. Of course it would be nice if other sites such as SourceForge or Berlios support bazaar, but more support for git or subversion would be welcome in Launchpad too. (Of course without first converting it to bazaar.) Your post seems to insinuate that Launchpad (unfortunately not all GPL) does have “cunning secret plans to launch a proprietary system based on it”.

  3. James Henstridge says: (permalink)
    June 12th, 2007 at 2:04 am

    Zeno: how would you implement such a “renaming tool” outside of the VCS? To accurately track renames, that information needs to be recorded at commit time (and do so for all commits). If you don’t do that, then you’re left having to guess where the renames occurred and you’re back to where GIT/Mercurial are.

  4. Thorsten Wilms says: (permalink)
    June 12th, 2007 at 9:16 am

    Regarding further thoughts … I wonder if it would make sense to have a distribution under VCS. An installation would be a checkout. Configuration changes, adding/removing software would define the local branch. Updating / upgrading the distro would be merging.

    For version control on a desktop level, it might be interesting to do branching / checkouts / merging via drag and drop, so users could collaborate on any kind of project not just on a file, but a versioned project level easily.

  5. brendan says: (permalink)
    June 13th, 2007 at 6:27 pm

    James, why do you say that Mercurial tracks renames the same way that git does? In fact it records copies explicitly, and uses that information for log, annotate, grep, merge etc.

  6. Jakub Narebski says: (permalink)
    June 19th, 2007 at 4:11 pm

    About recording renames, it usually requires explicitely telling VCS about rename. First, you have to remember to do that, second it is useless in mixed VCS environment, where some changes come from other VCS like Quilt or as mailed patches.

    Mark, could you please *tag& this series with something like “Version Control” and not only “Thoughts” and “Free software”? Thanks in advance.

  7. Bob says: (permalink)
    July 9th, 2007 at 3:26 pm

    Lol @ cunning plan, must be a Blackadder fan.

  8. Mark Shuttleworth on renaming and merging — Version Control Blog — branching and merging, Ideas, SCM features and concepts, Bazaar/bzr, says: (permalink)
    October 8th, 2007 at 8:50 pm

    [...] “Further thoughts on version control”; [...]

  9. code, code.back, code.back2… - A better way with Revison Control (svn/git/bzr/hg tutorials & comparisons) « ☠ I could not think of a blog title ☠ says: (permalink)
    April 26th, 2008 at 6:26 am

    [...] in their changelogs. I haven’t found any videos on Bazaar but there have been three, shuttleworth, posts recently on bazaar as a lossless [...]