Skip to content

A podcast for those who design, develop and run websites.

Boagworld is the blog of web strategist Paul Boag who lives in the heart of rural Dorset (hence the cows). He produces a weekly podcast with UX consultant Marcus Lillington on building and running websites. They also run the web design agency Headscape.

Latest Shows

203. Why your blog fails
This week on boagworld: the secret of successful blogging, will Google personalisation affect your sites ranking and how to help users too busy to read.
202. Rocket Surgery Made Easy
This week on Boagworld: Steve Krug on monthly usability, Steve Marshall talks about form design and Paul rejoices over the new era for browsers in Europe.
201. Are clients stupid?
This week on Boagworld: We review the freelancing book Noded, discover a new web tool called 'Support Details' and Paul tells us all a story.
200. A taste of the show
This week's show gives you a taste of the live 12 hour marathon that took place to celebrate the 200th Boagworld.
199. Time to generalise
This week on Boagworld: The changing role of web designers, Colin Firth on content and Becky Jones talks about the changes at Google.

or view all shows

Have your say

Become a part of the Boagworld community...

To Version Control or Not?

Posted in Tech/Development, Web strategy on: Monday, August 18, 2008 by

Version control can seem like a very daunting thing to incorporate into your work flow, but once it’s there you can be left wondering how you ever lived without it. Paul Stanton gives his thoughts and experiences on the subject.

This post has stemmed from an e-mail by Simon Hamp whom has just started working for a PHP team and has been given the task of assessing their current systems. Simon writes:

I wanted a professional opinion on a proposal I have made to move from file-based (i.e. manual folder ) to full-blown source management.
Is it worth making the change from an existing system and move to something like Subversion for a team of our size, considering that this would change the processes for those who have been here the longest quite considerably?

Version control is one of those things that you already know you should be using, and if you’re like me, have promised yourself for a while that you’ll get round to learning and integrating into your own workflow. Chances are that one day, disaster will strike and you’ll realise why it’s so important.

I’m going to be honest with you here, I can’t profess to be an expert in version control. I’ve been playing around with it, and the team I work with are very close to making it a mandatory part of our and development workflow, but I hope i can provide some form of assistance in your decision to adopt a version control system, and maybe convince myself in the process.

That being said, I don’t think there even is a decision to be made. You – need – version control. There’s no real question about it. The biggest challenge we face is integrating this into our existing workflows.

Let me take a step back, and explain what version control is for anyone unfamiliar with the concept.

Version Control Systems (VCS) (also known as Revision Control, Source Control or Code Management) is a way of managing multiple versions of the same information, which is most likely – in this case – the source code of your website.

In the simplest terms, VCS allows you to keep track of the development of your source code, keeping track of the changes you make as you go along with all the changes being stored in a repository. You may already use a crude method of version control yourself, naming files such as index1, index2 etc. VCS systems keep track of all these changes, and let you revert to any previous version if the need arises.

The real benefit of VCS comes when you have more than one person working on the same file. Instead of you overwriting each other’s changes, or attempting to manually merge the changes from one developer with the changes of another, the VCS can take care of all this for you, creating branches for each developer to work on which allows multiple to work on the same file simultaneously, then merging the changes into a single version, highlighting any conflicts or problems that may arise.

There’s plenty of more detailed descriptions of VCS systems online if you’d like to learn more (Wikipedia might be a good place to start), so I’ll save diving too deep into the rabbit hole for now, I’m sure that if you’d really like to learn more, Paul can work it into shows. For now, I’ll return to our case in point; “Is it worth making the change from an existing system and move to something like Subversion for a team of our size”.

I work in a team of 11, with 2 other and 3 other developers, and we ran into issues recently with a site that needed some last minute changes made. I was asked to do some markup modifications and changes which required me to modify multiple files. This project wasn’t in a VCS system, so I was given a of the files on a flash drive. I made my changes, re-saved the files to the flash drive and handed back to the designer. In the mean-time, the designer had made other changes to the files, and needed to merge my changes with her own manually by copying and pasting from my copies of the files. To further complicate matters, the developer then needed to take these files and integrate the markup and CSS into their .NET templates.

I don’t need to tell you that this was an absolute nightmare, at one point we were managing 5 local copies as well as 2 remote copies (one on the dev server, and one on the live server) To be fair I’m not sure if the team has ever hit a problem such as this before, with multiple people working simultaneously on a project and unfortunately we don’t have VCS as a mandatory part of our workflow as yet, but after this experience, I’m sure it won’t take long.

If we did have VCS, I could have checked out the necessary files, made my changes, and checked them in, the other designer could have checked out the same files and made her changes simultaneously, and also checked them in when she’d finished. Then we could have simply merged these together into one, any conflicts would have been highlighted for us to easily rectify. The developer, when ready, could easily deploy these from the dev server to the live one with a couple of commands.

There will be issues with integrating this into your own processes, especially with people who have their own tried and tested systems, but personally I think you really have to put your foot down here. VCS should be a mandatory part of your workflow, especially as your team grows and there are more people involved with projects.

If possible, I’d recommend arranging sessions on whichever VCS you choose to adopt, you should only need a day, or even a half day to go through the basics of using a VCS for your dev team, I’d even wager (or should that be “hope”) that those who have been professional developers for some time will already have experience of one form of VCS or another and shouldn’t be resistant to using one.

My last point would be to explore the various VCS systems on offer. The main 3 that come to mind when writing this article are Subversion, GIT and Mercurial.

Subversion (SVN) is the system that most listeners will have probably heard of. SVN is a centralised VCS system which centers around a single repository. Subversion is a well known, and generally well supported tool with a wide range of user interface available such as such as IDE extensions for most popular IDE’s and Windows shell extensions like TortoiseSVN. There’s also native Windows and Mac GUI tools available to make the normal command line interface a bit easier to digest.

GIT and Mercurial are slightly different in that they’re Distributed Version Control Systems (or DVCS for short). While Subversion manages a single repository, a DVCS system like GIT has multiple repositories. The best way I can explain is that imagine if my team was working on a project, and we had a repository on our dev server, I can then clone that whole repository to my laptop, and take it away to work on at home, on the train, or at the top of a mountain if I so wished. With a centralised VCS like subversion, you really need access to that central repository to commit your changes, with a distributed system, all your developers can mainta
in their own local copies of the repository, commiting changes to the master repository when needed.

GIT is actually the system I’m getting to grips with at the moment, the branching, tagging and merge tools are more stable than the ones within Subversion. Please note that I’m not trying to bait anyone here, and I don’t want to get into a flame war about which VCS is better than the other. GIT’s distributed nature makes more sense to me personally, and allows me to manage my branch without network access if needs be, and in the event that our development web server with the master repository blows up, each developer has a copy of the repo in some form, and there is a good chance that the whole codebase can be rebuilt easily.

So I hope this persuades you into adopting some form of version control, but if you really ask yourself, you already know that you need to use it, and to return to Simon’s original question, I bet your developers already know they should be using it, they just need a little encouragement to integrate version control into their processes, the benefits far, far outweigh the disadvantages.

By Paul Stanton

What did you think about this post?

23 Comments

Comments are for the discussion of this post. If you have other questions / comments then post them to the forum or send me an email

  • SnakeOil says:

    Wouldn’t using Dreamweaver’s Check In/Check Out solve your problem?
    Do you really need full version control? I guess this depends on the size of your project and the number of people working on it.

  • Graham says:

    Yep, go for the version control, no doubt about it.
    If users of this system are worried about using something based on the “simpleness” of it, I will suggest this order:
    1 – Subversion
    2 – Mercurial
    3 – Git
    I’m a Mercurial guy, but reading about designers using this maybe having something simpler would be better.
    The strong point of Subversion is the availability of good graphical tools for it (maybe a plus for the not_quite_powerusers)
    PS: Also try Mercurial, it doesn’t have as much marketing as Git but you won’t spend lots of time getting in grips with it ;)

  • Mark Nutter says:

    I have only been a serious web developer for about 2 years now and there have been quite a few habits I’ve been coaxed into by my brother (Charles Nutter of JRuby) and the Rails community at large, and the big one was version control. I have two left hands when it comes to UNIX and that’s the big reason why I avoided setting up subversion for my projects, but I finally decided to get it done about 6 months ago and looking back on it I can’t believe I made it that far without it.
    Not only has it already saved my butt big time on a few time-sensitive projects, but it has made my deployments and updates an absolute breeze. I’m going to jump on the GIT bandwagon soon too and from what I hear the learning curve is taller than that of SVN but the functionality better.

  • Lee Theobald says:

    I have also had countless hours saved by version control. It can be so handy when you release you need some code that you removed a few days back. It’s a simple case of just opening the history and finding what you need.
    If getting something like SVN running yourself puts you off, why not consider one of the many hosted options (many with free plans). For example, http://beanstalkapp.com/

  • Mark says:

    Subversion is great, as Paul says you take a copy of repository files locally and can work on them to your heart’s content on- or off-line. When you’re done you commit your changes, and Subversion merges any changes made by other people.
    You can create “branches” in the repository which effectively creates multiple copies of the files, which can be worked on separately and merged together later if required.
    I’d recommend TortoiseSVN as an easy to use Windows client for Subversion, if your favourite editor doesn’t have SVN support built-in.

  • Simon Hamp says:

    Thanks for the answer Paul. I appreciate your time spent on this topic. And thanks for all the comments guys (and gals).
    I’m convinced that version control is definitley the road to take. Sadly I’m not the one who makes the decisions, just the proposals. So I have to leave this one to the bureaucracy.
    Thanks for your input!
    Long live boagworld!

  • Simon Hamp says:

    Sorry… credit to Ryan! couldn’t see your name… it’s a very light grey!

  • @SnakeOil Does a cake really need icing?
    VCS isn’t just for “big sites” or teams, it’s indispensable in and of itself. Being able to go back through time in your code, finding which revisions caused (at the time undetected) bugs is a blessing. Being able to scan through commit comments is always handy. Tying this into an issue tracker just makes life a dream.
    The main reason people don’t implement it is because of the fear factor that it takes too much time, or is hard to get it going. By and large this is a fallacy.

  • Danny Murphy says:

    I am a freelance web & graphic designer I work by myself I have use SVN before in a company I worked at but would I really benefit from using Version Control?
    Sorry if I sound naive.
    Cheers,
    Danny

  • SimianE says:

    I’d been thinking about version control for ages, but eventually the other day I decided to bite the bullet and take a proper look at the options.
    I went with TortoiseSVN and I have to say – it’s easy, and painless, and I wish I’d done it sooner.
    TortoiseSVN has a fantastic help guide that does a very good job of explaining the concepts behind SVN and why it’s a good thing. I’d recommend setting aside two hours of your day to read through the help guide, install the software and set up a test repository for one of your projects. That’s all it’ll take and you’ll never look back.
    You’ll be amazed how simple it actually is.

  • Ryan Taylor says:

    @Simon Hamp: You had it right the first time. Paul Stanton wrote this article. I just published it. :-) Credit goes to him.

  • gblake says:

    I’m not even working professionally as a web developer but I’ve started to use SVN recently (and I’m only in a team of one – me!). I’ve used config. control software for a number of years at work now (for software development) and I think that it’s a big mistake to ‘not’ use it. I think a VCS is essential whether you’re coding at the server end or writing HTML/CSS/JavaScript.

  • I’d echo the comments of others here: TortoiseSVN really is the bees-knees. It definitely makes dealing with version control so much easier, especially if you’re a designer who isn’t used to arcane command-line kung-fu. Plus it integrates really nicely with apps like E Text Editor providing a seamless experience. I am actually very comfortable with the command-line, and I still prefer Tortoise.
    I tried Git a while back and really grew to love it, but I’ve switched back to SVN for now because I ended up missing TortoiseSVN so much. Once Git has a UI as useful as Tortoise, then I’m going to switch permanently.

  • Lee Theobald says:

    @Danny Absolutely! You must have had moments when you accidentally overwritten something you needed? Or rewrote some code only to want to go back to the original? It’s not just for managing code for multiple users, it’s also a form of backup.

  • I’m a front-end guy without a much experience with source control and I find Git a pleasure to use with the help of GitHub (http://www.github.com).

  • Danny Murphy says:

    Thanks Lee I will have to implement it.
    Anyone know of a good tutorial or starting point for setting up SVN on a Mac?
    Cheers,
    Danny

  • Pundit says:

    Source control really is a must: I’ve used subversion to manage a one-man project and it definitely was NOT overkill.
    I’m a bit confused by your description of DVCS – I’m sure there must be more to it. If the only benefits are the ones you describe, I don’t see a difference between that and just checking out the entire repository (which is quite a common case). Is there some aspect of merging between the checked-out repositories that you’ve omitted?

  • Tom Morris says:

    There is no reason not to use version control on even the smallest of projects – it’s as useful for one man bands as it is for large projects with hundreds of people on a team.
    Why would you want to use a DVCS with decent branching/merging support on a web design project? Well, here’s a scenario: you have two developers and three designers. The designers are working on creating CSS and graphics for the site, and are working away on their own branch. Meanwhile, the developers are working on the data model of the site. The devs can swap changes between themselves all day, while the designers do likewise. When the developers are happy they have gotten the code ready for the designers, they pull the branches back together, merge and push that to the designers.
    As for why you should use a DVCS like Git rather than a centralised system like SVN – simple. You can check out from an SVN repo and work offline, but you can’t commit until you are connected again. Commits take much longer: as it’s got to transmit your code to the server. This means that any person working on the code does not have the ability to commit little changes, leaving many, many hundreds of changes lying in the working directory. Git users, on the other hand, can commit as much as they like. I’ll often commit shockingly small amounts of code – because committing a change does not mean that I am sharing it with the team (which, as an open source developer, for me means anybody), but can come back and roll back my changes before pushing them out to others.
    I’d strongly recommend Git. It really is liberating to have a version control system that doesn’t require a server – starting to use version control is as simple as creating a directory and running “git init”. I now use version control for the tiniest of jobs. Git user interfaces are getting better: TextMate on the Mac now has a nice interface for Git, and there is an excellent project called GitNub which is developing a similarly pretty OS X interface. There is also “git-svn” which allows you to use Git to locally work on Subversion repositories – useful if you have switched to Git but find yourself working on a project still done in Subversion.

  • Tom Morris says:

    One other things that is worth noting about Git: look at commit hooks. This is a feature in Git which can lead to some serious cool. You can basically set things that run before or after a commit is made. What could you do with this? Have it so that an automatic e-mail is sent to the team (or anyone else for that matter) upon commit. Or perhaps have it so that it checks all HTML in the repository with an (X)HTML validator to make sure that no non-validating code gets checked in. Git hooks are awesome and really useful.

  • John Barreiros says:

    In a previous job, I helped set up and institute Subversion. After using it for just a week I could not believe how I had coded without it before. Usually, only one person worked on a job, but having that code history was very reassuring. When we did share projects, being able to merge two versions of the same file was just killer.
    TortoiseSVN does absolutely rock. It’s also a good idea, if you have a few developers, to install a web-based repository viewer (like WebSVN), which makes browsing your projects history a breeze.
    I’ve also used Microsoft SourceSafe, which flat out sucks. Stay away.

  • Stanton says:

    Thanks everyone for adding your opinions, some awesome comments here :) I might have to do a follow up at some point, as I mentioned, We’ll hopefully be making a push soon for GIT to be a mandatory part of our workflow (yay!)

  • Eike says:

    I can only agree on version control being essential. It has really nothing to do with how many persons access the files – I use version control at work with 50+ people on the same code (not at the same time of course but since we don’t have ‘code ownership’ you can find anybody working anywhere).
    But I use it also for all my private stuff.
    Ever thought “damn, I know there was some version that solved this better than my current”, or “why the hell did I do *that*?”
    There it is: every saved version in the version control has a descriptive message attached, so you’ll never click through file1 to file25 to find what you look for.
    And this history is never lost.
    All vcs have an intelligent way of saving this history (saving only the difference between versions or doing other stuff), so you usually don’t need to worry about disk space too much either.
    I wouldn’t recommend git to any beginner until the git developers got there user interfaces right (I use it at work). It fails to follow the one strictest rule I have regarding vcs: “Never ever destroy my data”. But git is definitely the one vcs with the largest feature set. If you really want to go for git, then I would advice to have somebody at hand who already knows git very well.
    Neither SVN nor Mercurial requires you to set up a server. The choice between SVN or Mercurial is then probably one of taste, a choice between “centralized” and “distributed”. (Personally I like the distributed way).

Leave a comment

Additional Information

Produced by Headscape

Boagworld is produced by the web design agency Headscape founded by Marcus, Paul and Chris Scott. Headscape also has a number of other talented guys who blog. Check them out.

  • Craig Rowe is one of our amazing developers and writes some superb posts on everything from .net to AIR apps.

  • Ed Merritt is a Headscape designer who's blog contains examples of his work and a number of free Wordpress themes.

  • Dave McDermid is a Headscape developer who has an excellent blog. He blogs on everything from AJAX to security.

  • Rob Borley is one of our project managers and blogs regularly on client and project management issues.

  • Leigh Howells is our multimedia design guru (whatever one of those is). He blogs on a mixture of design and music.

Paul elsewhere

Paul just can't shut up. He publishes regular audioboos, has a personal blog and is addicted to twitter. He also writes and speaks regularly. Check out the most recent below: