Version Control is one of the most necessary steps in the development process. I have had extensive experience working with a lot of Version Control Systems however I have never really written about them. Below you will find a review of a few Version Control Systems, Open Source and Commercial.
Open Source Version Control Systems
There are only few choices available in the Open Source arena. We can split most of the available tools in the Distributed Version Control System and Centralized Version Control category.
Let’s start with git. Everyone’s favorite VCS. Git is a distributed version control system. Which means instead of checking out code, you clone the repository when you want to start working off a remote repository.You do not need to be in constant contact with remote repository from that point on. Not even to view the history or commit logs. You can continue working, create branches and merge them back to your master branch as needed and once in a while pull changes from the main repository and push your changes to the remote repository. This gives users a good amount of disconnected mobility. You can download a git client from here. For git there are two good hosting options Github and Bitbucket. For a do it yourself solution you can check out Gitlab or Gogs.
Honorable Mentions: Mercurial,Darcs and Bazzar. Both are of same quality and same feature set as git. I know I risk starting a war in comments section by saying this but for an isolated development project it barely makes a difference which one you choose. The big difference is behind git the ecosystem of github exists which makes development and collaboration easy.
The once king of Version Control Systems is still a corporate favorite. Subversion follows a client-server model also known as a centralized system. To work with subversion you need to connect to a subversion server. When you need source code you check out the code from a branch either the latest version or another version that you want. Branch can be anything that you name including the recommended trunk. Once you can no longer access the Subversion server, you no longer have access to the history or logs and neither can you check in your changes. The copy you checked out becomes a slice in time of the code. Subversion is popular because it allows you to restrict access to various parts of the code without having to split up your code into each module. It is also easy to deploy and gets you up and running quickly. It supports all of its functions over HTTP when integrated with Apache. You can download subversion from here. You can have a free hosted subversion at RiouxSVN. Tortoisesvn is also a very popular Subversion GUI client.
CVS is the kindly old grandpa of all Version Control Systems. Incredibly its still used in many places because I keep seeing job posting that say “must know CVS” although thankfully most of those posting are for migration. Although not as feature rich as other Version Control Systems, it can still hold its own and offer many features that Subversion does. It sports a versioning scheme which is vastly different from Subversion. CVS is much easier to learn however is much slower due to the back-end not being as advanced as SVN. Also CVS commits are not atomic unlike Subversion which will rollback a commit if it fails midway. CVS can be downloaded from here. TortoiseCVS is a very popular GUI client for CVS users. Unfortunately I could not find any free hosting options for CVS.
Commercial Version Control Systems
The commercial software available offer a lot of choice and are squarely aimed at large enterprise. They are rich in features and are supported by large organizations.
IBM Clearcase is a very popular choice in large enterprises. It offers a lot of features to the developers however, in my experience, these features are best configured via automation and scripting. The defining feature of ClearCase is the MultiVersion File System which can offer a dynamic view of the code base to a user thus providing a view of not only the code that has been checked in but also the work that is in progress. ClearCase also supports snapshots which are more analogous to checkouts of other Version Control Systems. It also comes with a replication tool which allows administrators to connect remote locations together without straining a single server and improving performance. However if not managed properly things can go horribly wrong with ClearCase and soon you are dealing with evil twins and the rest of the super-villans from the D.C line up. You can buy ClearCase from here. (Sorry I could not find a trial version, maybe the evil twin took it.) ALMToolbox has a lot of useful tools for ClearCase.
Perforce a.k.a Helix
Perforce was my favorite VCS when I used to use it. It comes with tons of features like changelists. Changelists allow you to bundle your work in nice little well bundles and even tag them with a bug id if you have them integrated with your perforce. That way each of your checkin is tied to a bug id without much extra effort. Another great feature is shelves which allow you to shelve your code, that is put it to side without checking it on so that it does not “lock” any one else’s check ins. Perforce also provides a nice graphical diff facility and a strong three way merge. It also has a strong cross platform support with a single server on UNIX or Windows can support clients on any platform. Within the last year Perforce launched a new platform called Helix that is a mixture of products and PaaS. These include Helix Versioning Engine,GitSwarm, Swarm, Cloud, Insights, Apps and Threat Detection. You can find more details and try the products here.
Microsoft Team Foundation Server
Team Foundation Server used to specialize in Microsoft technologies and Microsoft builds. However it now claims it can handle any build. TFS Server is best suited for agile teams and offers a lot of goodies for such teams like kanban board. It also has continuous integration and continuous delivery features built-in thus making any extra software deployment unnecessary. It is also easy to extend TFS and add support to it from apps like Trello and HipChat. TFS provides services beyond version control and is well suited for teams who follow Agile methodology to the core with functionality like team building, stories, and project portal. It comes in an express version that can be downloaded here.
So which Version Control System does your company use and which is your favorite ? Leave a comment below and let me know.