Pining for a distributed version control system

I would LOVE to use a distributed version control system. While my main computer was down over the last week I was using my laptop for development, and I couldn’t check-in anything (The server was of course on my main desktop)!

Usually I’m developing one feature on my main computer and a different feature on my laptop; having a distributed version control system would be perfect because I could be checking things in on my laptop (where I do all the easy features) and only merge them into my main computer when I’m done the next major feature on it.

Bazaar – looks great

Specifically, I’d love to be using Bazaar, which at first glance looks great! The website looks great, the focus on functionality (such as rename) looks great, the focus on usability and different work-flows looks great. This software looks great.

Subversion is almost great

About once a week I get bitten by some Subversion weirdness, almost always around renames, and sometimes caused by I don’t know what but files/directories either disappear or stick around after I’ve removed them. Like the famous Mark Shuttleworth blog posting, I think renaming is very important; I didn’t use to think this but the more I get bitten by the lack of good/real rename support in Subversion the more I want it.

Distributed version control is not there yet

I realized the other day that I’ve become reasonably demanding about my version control. I didn’t know this about myself, it just crept up on me.
The top features I want are, in no particular order:

  • EASY to use
  • Distributed
  • Hi quality rename support
  • The ability to do things directly in Windows Explorer (like with Tortoise*)
  • The ability to a few things in Visual Studio
    • Diff (VERY important)
    • Commit
    • Update
    • Rename files
    • Easily switch between branches

Kyle Cordes has a very nice blog posting on this subject here.

Command line tools – WTH?!

Unlike Kyle I don’t really care if it has a great standalone GUI as long as I’ve got the above features and I can easily see the revision tree somewhere then I’m good.

Additionally, unlike the <4% of Linux users (and what smaller subset of them are developers?) I NEVER want to use the command line to interact with my SCM. Ever. Period, exclamation point full stop.

When I read about GIT’s 2 million command line tools each one of which probably with hundreds of esoteric command line switches each of which probably accepts multiple types of options I think, “Who actually needs that and wants to spend time NOT developing to learn it all while potentially doing something disastrously wrong that could serious mess up your core repository?!” When I read that Mecurial’s command line tools are almost the same as Subversion’s, I just don’t care! Can you get a decent human readable diff from the command line? Can you get a meaningful navigable tree hierarchy from the command line?! (Plastic SCM even has a 3D revision tree for crying out loud – I DARE you to do that in a console window). Even most Java developers (who don’t even know the kind of productivity we achieve with .NET and VS) want to do things right inside Eclipse.

For crying out loud, we’ve had graphical user interfaces since 1979 people! If your DVCS only provides a command line interface then it’s not feature complete! If you have to declare that your “interface is far from perfect or at least bug free” and requires 29 steps to install it then it is not feature complete. Free is great if its works well, but I will happily pay for quality software if it does what I want at a reasonably price (read: something a small start-up business can afford without taking out another mortgage). (Sorry for the rant. I do feel better now though.) This all ties into…

It’s about productivity silly, not free software

I should mention that I do really appreciate free software and the fact that people enjoy donating their time and expertise to free software projects. However, I am a very goal oriented person. I remember years ago when I was running Linux for the first time and I needed to print a report for some second year university class. I discovered that Linux didn’t have a driver for my printer and when I asked around the overwhelming response was “Great! Write one!” I promptly uninstalled Linux, re-installed Windows and easily printed my report and achieved my goal of handing in the assignment.

If a tool doesn’t make me more productive than I am now thus helping me achieve my goals more quickly or easily then I’m not interested. This is why I LOVE PostSharp and will happily pay for version 2 when it comes out. This is also why (even though I spent 8 years working with Java and know it inside and out) that I actually dislike Java and Eclipse when compared to .NET because Microsoft and the smart people building .NET focus on making developers more productive with each release. Conversely I saw a panel at Java One a few years back that actually lauded Java’s complexity because it helped keep out the VB developers! WFT?! Sure Java will let me run on 27 different platforms but I’ll probably never finish my software and all my prospective (paying) clients use Windows anyway.

As a software developer I know how much time it takes to really learn the craft of designing, architecting and writing good software, and how much time it takes to actually write really good software. Right now I’m working on building a software business, so yes, after dumping my life savings into this and living like a pauper for 2 years I’ll be charging for my software thank you very much.

So I will happily spend money on a distributed SCM if it helps me achieve my goals (one of which is not breaking the bank however). So if your free SCM doesn’t help me achieve my goals faster and easier than what I’ve got now then I don’t want to use it, and that means it needs to integrate to some extent into Visual Studio and Windows Explorer.

Why I’m using Subversion (sigh)

To this end, Subversion is very easy to use; sadly, it is not distributed and has terrible rename support that messes up about once a week but it’s manageable. TortoiseSVN not only works on an x64 machine (which I think more and more developers have – if your development tools don’t support x64 yet then what the hell are you doing?!) but it actually exposes lots of the capabilities of Subversion (such as rename, for what that’s worth). TortoiseBazaar, which I’d love to use doesn’t even support rename yet, which is weird considering that proper rename support is Bazaar’s claim to fame!

VisualSVN Server makes the server very easy to setup, and AnkhSvn 2.x is rock solid and wonderful so I can easily use Subversion from within VS2008.

BitKeeper, SurroundSCM don’t post their prices which means I probably can’t afford it, Code Co-Op (besides having a scary picture of a woman with a moustache on their home page) talks about the “latest” version of Visual Studio as 2005 (yikes), DARCS is apparently very buggy, and Monotone has a very cute mascot and no VS2008 or Windows Explorer tools whatsoever.

So I’m stuck with Subversion. Sigh.


8 thoughts on “Pining for a distributed version control system”

    1. I’ve never had an opportunity to use it, but people tell me it’s pretty cool. I didn’t think it was distributed though.

      However, I really like the idea of everything being related to “work items”.


  1. Hello Robert,

    I totally 100% agree to your statements… Whatever slows you down during development has to be replaced. Currently I have to work with JAVA EMF and RCP, and I’ve been working months and years before with .NET… It is a PAIN!
    Hopefully SVN will emerge as a DVCS in the next major revision, so we can keep the good old tools like Tortoise or Ankh.


  2. I sent BitKeeper an e-mail on Saturday, but so far I haven’t heard back from them about their free trial.

    I must say, their website doesn’t look like much, so hopefully they’re like my favourite Chinese food restaurant: doesn’t look great but the product is fantastic. 🙂

    I also strongly dislike it when they hide the price, saying “give us a call!” What is there to hide?

    1. I called BitKeeper, and the sales guy tells me that they have next-to no GUI right now and that they are still heavily command line based. That explains why the linux guys were using it, and why I won’t be.

  3. Hi Robert,

    I have been using Git for a little over a month now on a Vista64 machine with no major problems yet. Like you, I don’t mind paying for something that saves me time, but Git seems like the best that is out there right now. It took me a couple of hours to completely set up. The installation is actually easy and has a graphical user interface (Tcl/Tk on top of command-line, no surprise) which works well, even though it won’t minimize. It is very fast, has very good support for branch and merge, nice history view, easy to backup, and I think will work well for me when I hire on other developers. I love the idea of distributed SCM. However, where you need to customize the experience outside of the GUI (like setting it up to ignore the bin and obj directories in your projects globally), it is a bit cumbersome. Windows support feels very second-class vs what I expect is better support in Linux. I would prefer something fast and distributed and geared more towards Windows, but until I come across something better I will stick with Git. I’ll be going to a free Microsoft event on TFS 2010 and I’ll let you know what I think afterwards.

    Best Regards,

Leave a Reply

Your email address will not be published. Required fields are marked *