Best Version Control Software

I haven’t done any polls lately so guess what time it is? Yes, it’s poll time! Better yet, this is not just any poll – this poll is serious business. I want to talk about revision control software. Yes, I know – I’m asking for trouble. There are rules for civilized discussion after all. You don’t bring up religion, politics, text editors and revision control. But I’m in a rebellious mood today.

{democracy:25}

So tell me, which one do you use and why?

Personally, I have been a loyal Subversion user for years. It works well, it does what it is supposed to do and it is possibly one of the most popular systems out there. It also helps that both Google Code and SourceForge use it. Not only that, but it also has one of the best UI implementations I have seen so far. Tortoise SVN is really, really good and makes managing repositories a cinch. Whenever I do any programming on Linux (which is often) I actually miss having Tortoise on my system – that’s how friendly and well designed it is. I have yet to see a version control UI that I would like better.

That said, everyone keeps telling me that Git is the Shit and that I need to try it. All the cool kids are using it, and I may loose lots of street creed and possibly even my geek license if I’m not at least familiar with it. So I finally broke down and tried it and I must say that I like it. I haven’t really used many of it’s unique distributed features (like forking or merging) but I can see why people are so excited about it. Now, if I could only find a Tortoise like UI for it, I would be in heaven.

I never really used Mercurial or Bazaar so I can’t really say how good they are – I included them in the poll though because they are quite popular out there. I also included the very obscure SourceJammer because I had to use it once. It was actually quite nice – we were working on a Java project and were using a Java based source control. It was very easy to work with (the UI was quite well designed) but installing and configuring it was a nightmare. It required you to have just the right verison of Tomcat and a dozen dependencies (some of which were version dependent as well).

How about you? What version control systems have you used? Which one is your favorite? Which one you hate with a fiery passion? Let me know in the comments.

This entry was posted in Uncategorized. Bookmark the permalink.



12 Responses to Best Version Control Software

  1. Sam Weston UNITED KINGDOM Mozilla Firefox Windows says:

    Not sure how well it works properly yet but there is already a port of Tortoise SVN for GIT. http://code.google.com/p/tortoisegit/

    Reply  |  Quote
  2. I’m going to be one of those people and tell you this: Git is The Shit!

    It easily defeats any other system you can put it up against. For an idea of my experience: at work I’ve maintained code in ClearCase, CVS, Subversion, Perforce, Mercurial, and Git. I’ve also read the Bazaar, fossil, arch, and Monotone manuals cover to cover and toyed with them, but no real work done in them. Before Git was around, I used Subversion for my personal projects and at the time I thought it was awesome. Now I think it’s awful. :-)

    I’ve written my argument here, but I’ll summarize (heh! right!) it here. Oh, and I’m also going to compare against Subversion a lot since that’s what most people looking at Git are coming from. And since you said you like it so much.

    First, it’s distributed, which is how all revision control should be. This means you have an infinitely flexible workflow. Every person gets a whole repository that they can manipulate any way they want without harming anyone else. It also means there are no permissions politics, deciding who gets commit privileges. Everyone commits to their own repository.

    For larger projects, it can also play off the web of trust that human beings form naturally. You pull only from those people you trust to maintain good code, and same for them, and so on. You will get code from people you don’t trust, but only once it passes through people you trust through a path of trust.

    Second, backups are automatic. Each clone is already a complete backup. With Subversion, you have to keep the central repo backed up regularly, or you might lose the whole thing in one hard drive crash. For my personal projects, I have a repository on my host on the west coast, clones on all my personal computers (east coast), maybe one on GitHub (whereever ???), and maybe even a clone at work. Pretty much the only way I would lose all my code would be a nuclear war. And that’s without including normal backups of my files.

    History is immutable in Git. This is enforced cryptographically by the hash IDs. No one can change the history of a repository without alarms going off. This also includes accidental corruption. It’s trivial to verify that a repository is in perfect order (manually with “git fsck”).

    Tiny checkouts. You would think that a Git clone would be larger than a Subversion checkout as it includes the whole history. This is wrong. Git clones are smaller than Subversion checkouts! (Compare them using git-svn) And then the central repository is an order of magnitude larger with Subversion.

    Real branching! All distributed SCMs get this automatically. Subversion and its centralized cousins have to fake it, since their history can only be linear. Also, lightweight branching. In Git, (at work anyway) I’m always making short-lived feature branches and working in those. It’s hard to work without them now.

    Git is fast. Not only does it not need to access the network for most operations, but it’s fast all around. I believe it’s currently the fastest one there is.

    Clean, elegant design. Seriously, Git is a really neat piece of engineering. Learn the internals. Learn how blobs, trees, commits, and tags work in the object database. Read about how packs work. There’s a reason it’s called a “content tracker” and it’s often described as being a filesystem. If you understand this stuff, you won’t ever be surprised by Git either. It’s all about building a nice DAG.

    Now, decentralized SCMs get most of the benefits of above. So here’s why I like Git better than them.

    Monotone and arch are first-generation distributed systems. The pioneers. As a result, they made many design mistakes and are a pain to use. Don’t bother with them outside of curiosity. Or unless you need to clone Pidgin.

    Bazaar is just weird. It uses pseudo-random IDs instead of hashes. They’ve already rehauled their repository format because they didn’t design it right in the first place. Bleh.

    Fossil is neat, and it’s written by the genius behind SQLite, D. Richard Hipp. Wiki and bug tracking built in. However, I feel it’s kind of a niche SCM that would be very useful in specific situations.

    Mercurial would be my second favorite, and I would be cheering it on passionately if it weren’t for Git. But it’s nowhere near as powerful as Git. For example, Git does branching all in one repository. The idiomatic way to do this in Mercurial is with multiple repositories. It can work around this somewhat with the bookmarks extension, but still nothing like Git. Also, Mercurial isn’t very good at rebasing. It’s like an afterthought, available only as an extension.

    Mercurial does have two things going for it: patch queues, which are damn cool, and better Windows support. In Windows, Git has to run inside of an msys environment, and it can get quirky in ways that won’t happen on proper unix-like systems. But sometimes I think of this as a feature of Git. ;-)

    Git’s GUI side is lacking, but you’re really using a GUI for version control? Really? I thought those only existed for the purpose of newbie hand-holding. For someone who loves LaTeX I’m really surprised. Like most things, using it from a shell is much more efficient. The only GUI one really needs for Git is gitk, which is for displaying complex branching. It doesn’t do any manipulation of the repository. Something to note, only knowing the GUI is bad if you need to do remote (i.e. ssh) repo management, which is common for me.

    So that’s my position. I think if you get to know Git (or even Mercurial), you’ll wonder how you got by with Subversion.

    Reply  |  Quote
  3. peterix CZECH REPUBLIC Google Chrome Linux says:

    I’ve made the jump from svn to git quite recently and I can’t complain. It’s just so nice :)

    And yes, merges are where it’s at really. I make a few working branches during the day, test the hell out of my code and then merge those back to master. In svn, this kind of workflow would be really tedious… if not impossible.

    There’s also the possibility of using git to work with a svn repo.

    Oh, btw: http://code.google.com/p/tortoisegit/

    Reply  |  Quote
  4. ths GERMANY Mozilla Firefox Windows Terminalist says:

    I have added Telelogic Synergy, but I hate it. I had to use it for years in a project for a customer. It has a nice concept of “tasks” to bundle some files together which are logically related, and then you check in the task, and not each singular file. This is nice. But CLI and GUI are the worst I’ve ever seen.

    Currently I use Subversion with the GForge web GUI. This is kind of a commercial sourceforge clone. I like it. As you, I’m using Tortoise most of the time, but it’s nice that you can mix svn CLI and Tortoise GUI. For batch jobs I return to bash+svn+gforge on the CLI.

    Reply  |  Quote
  5. Arkanosis FRANCE Mozilla Gentoo Linux says:

    I answered Git, but if I could have answered twice, I’d have voted for Mercurial as well.

    Both are very powerful, Git has more features and Mercurial is easier to start with.

    Anyway, I prefer both of them over CVS, SVN or Perforce (by far) — I’ve never tested the others.

    Reply  |  Quote
  6. Tino UNITED STATES Mozilla Firefox Ubuntu Linux Terminalist says:

    I voted for Darcs mostly because it was fun to add a poll option :D. But it being based on a “theory of patches” is pretty cool.

    Reply  |  Quote
  7. Zel FRANCE Mozilla Firefox Windows Terminalist says:

    I mostly use Subversion.

    We did try Mercurial a few years ago but after corrupting the repository 4 times and having multiple branching/merging problems, we gave up on it and went back to svn, and didn’t have any further problems… whatever bug we were having should be fixed by now, I hope.

    Reply  |  Quote
  8. Naum UNITED STATES Google Chrome Mac OS Terminalist says:

    I still am using Subversion for some Rails systems we wrote, but lately, been exploring Git though not real comfortable with it even though I’ve read through the O’Reilly book. Seems to do all svn does, though initially, had problems building it on OS X…

    Reply  |  Quote
  9. rev UNITED STATES Google Chrome Windows says:

    i use clearcase at work, but for everything else i use fossil. i haven’t tried git yet, so i can’t compare it to fossil or clearcase. for what its worth, fossil impresses.

    Reply  |  Quote
  10. Been using CVS, VSS, Perforce, SVN, VSS for now. Not all have been by choice. VSS listed twice because of awfulness. Will try Gitt or Mecurial once I get out of “STRESS” time and get a new personal project started.

    Most important feature; it helps you do what you want. Subversion is (for now) good enough, and no trouble. :)

    Reply  |  Quote
  11. Luke Maciak UNITED STATES Mozilla Firefox Windows Terminalist says:

    @ Sam Weston:

    Nice. Thanks for the link. For a second there I thought they were using Google’s SVN for this project, which would be quite ironic. The Source page points to an external git instance so I guess it’s ok.

    @ Chris Wellons:

    I know, I know it’s shameful. The point about TortoiseSVN is that it integrates itself into the window manager. Each file that is under source control will have a special marker on it’s icon – green if it is the same as in the repository, red if it was changed and etc. It lets you see at a glance which files were changed, which need to be checked in and etc. If you want to commit some files but not others you highlight them with your mouse, right click and say commit. For simple operations it is incredibly intuitive. I do use command line usually when I’m coding on Linux but whenever I’m messing around on a windows machine it is so easy to fall back on the old Tortoise habit. :P

    @ peterix:

    Yeah, I tried mess around with branches in SVN at several occasions and it usually worked ok for a little while and then turned into a massive headache once I needed to merge everything back together.

    Reply  |  Quote
  12. GiT8ter Mozilla Firefox Windows says:

    Chris Wellons wrote:

    I’m going to be one of those people and tell you this: Git is The Shit!

    True, GIT=SHIT…

    Better use Mercurial/Bazaar.

    Reply  |  Quote

Leave a Reply

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