Review of Version Control Systems for Linux & Windows
This is a review article on my choice of revision (version) control software.
- I have never used a Version Control System
- Source code already in place
- I edit on Windows XP PC (although I used to develop on my Ubuntu Linux Laptop)
- The Should I Date.com runs Ubuntu 8.10 Server Edition
Current programming / testing methodology
- Editting the PHP files with Geany
- Test code locally using a VMWare image of Ubuntu (with a Shared Drive on the Windows machine linked to the httpdocs dir)
- Upload via SSH with WinSCP to Should I Date.com
This programming methodology has been used for the past couple of months as I prefer hand coding.
Now however with the code base now becoming more mature I am finding the need to do more performance testing and bug fixing on the code already in place. This has lead to a few situations where for example, the modification of my Database class can have a massive impact on the functionality of parts of the website that I may have wrote several months ago.
I therefore felt it was time to implement a version control system to allow me to quickly “jump back” should I make a mistake.
Control Systems evaluated
Subversion (SVN), Mercurial (HG), GIT & Ubuntu (Canonical) Bazaar (BZR).
I currently have installed TortoiseSVN on my Windows box and a requirement is at most 4 clicks to upload the code I have just updated. There are extensions for HG & SVN & Bazaar, GIT has a similar Windows shell extension.
SVN is by far the most difficult to setup with an existing project, after 20 minutes of fiddling with svn import file:///, coupled with the fact I had problems connecting with svn + ssh I gave up on SVN.
Git was much easier to set up and get working and was not selected purely on the lack of decent Windows client available
HG and Bzr are very similar in their implementation and I liked HG’s inotify plugin.
Bazaar (BZR) chosen
Bazaar was chosen mainly due to Bazaar Explorer, a cross platform BZR, diff, merge platform which easily allows you to add, remove files and directories from the tree, to commit and update your tree. It is very extensible however and easily allows you to choose your own editor, diff, merge external applications.
My only annoyance of Bzr is that it does not appear to do a remote update when you sync with the host tree, which is easy to implement with SVN.