Source control management (version control system) is the heart of software development and in today’s fast paced development, getting the right system in place is absolutely critical.
The source control management (SCM) is one of the first items that gets established in a software project, and the need is to find the right tool and to set the right merging and branching strategies. In fact, configuration management is a broad space and goes beyond source codes. Read my article on Plural Sight on the Role of Configuration Management in DevOps.
In the source control management world, it comes in two variations – the one of the old and the trending one. Centralized version control system and distributed version control system.
Centralized Version Control System
The centralized version control system (CVCS) is a system that has been in vogue for a long time. In this system, the source code resides in a centralized system such as a server. Developers need to write directly into the centralized repository and read the code directly off the server.
In the image above, whenever developers write or read the code, it always goes to and from the server.
Distributed Version Control System
On the other hand, the latest technology around SCMs are distributed version control systems (DVCS). In this, the code repository resides on a server but it also does on every single developer’s machine. So when a developer saves the code, he is essentially saving it onto his system and when he pushes the change to the server, it gets pushed into all other developers’ systems as well – not through the server but directly between the DVCS. The image below showcases this arrangement.
Advantages of DVCS over CVCS
There are several advantages with DVCS over CVCS. The DVCS is a peer transfer system which is similar to torrent downloads. You no longer need a server to transfer files, it can be done between users. So, in the event of server unavailability, having a DVCS environment ensures that no productive hours or lost. In other words, CVCS presents a single point of failure which in today’s world , a big NO NO.
Also, the DVCS works much better in terms of the speed of accessing, merging and pushing code to the repository.
DVCS provides the ability for multiple developers to work simultaneously without being bogged down from other developers locking the repository to perform updates. All developers can work independently, similar to a group edit that can be performed on a Word document on Office 365.
There aren’t any disadvantages with using DVCS other than some amount of discipline is needed with the development process to consider saving the code at short intervals to enable quick code updates.
The tools of yesteryears such as Subversion, CVS and Perforce are the popular tools to use the CVCS technology.
Git is a tool based on DVCS and is widely used. If I was to compare, Git has total command as Google does in web search space.
There are many Git variants available in the market. While Git is an open source tool, it has been customized and leveraged by a number of players such as Github, Gitlab and Bitbucket.
Another DVCS tool worthy of a mention is Mercurial.