Picking an RCS and Offsite Backups

The last piece of administrivia in standing up a set of projects is to pick an RCS.  I know hard core developers get pretty passionate about their revision control systems -- I have known some unbelievably hard core Perforce people and other unshakable Mercurial folks.  RCS choices often turn into religious holy wars with factions, armies, knights, and a re-enactment of the Protestant Reformation in the Low Countries leaving vast swaths of farmland on fire -- and no code written.  

For my money, I need an RCS to:

  • Store my code
  • Easy check in/check out
  • Scriptable from a UNIX command line
  • Easy branching and merging
  • Works/integrates with known continuous integration tools 
  • Has GUI clients
  • Known to other developers in the development world

Due to its ease of getting up and going and the ease of access to 3rd party backup solutions, I will pick git.  It's easy, it's fast, it's small, it's scriptable, and, more importantly to me and the health of my current and future projects, it is easy to get off my local computers and stored in a private hive in GitHub.  I can share it, add people to the project, and build a distributed team who can all collaborate to the same archive.  It's the right choice for a project with a small number of people.

I cannot overemphasize the need for not only nightly backups of code but nightly backups of code to a 3rd party offsite.  Yes, the chance of the archive eating itself is pretty small, especially as git is a distributed RCS.  But even if that chance is anything provable over 0% the code must be moved to somewhere else for backup and restore.  It's not a bad idea to also get an encrypted S3 bucket and run a nightly cron that tars up the core archive and rsync's the tarball up to Amazon.  

Code is money.  Even open source code is money.  Better to be safe than having to rewrite from scratch or try to pull codebases off running instances.    One python script wrapping one rsync job running on one cron to one S3 bucket may be the difference between a hard drive failure being an annoyance and being the end of a project.  Having it in one offsite (GitHub) is fantastic; having it in two is able to sleep at night.