In this post, we will look at a brief overview of version control systems. Automation engineers should have knowledge of working with source control version systems. What system is in place for source control changes from enterprise to enterprise.
Version control aka Source Control is a system that records changes to a file or set of files over a period of time so that you can retrieve specific versions later. Mostly we will use software source code as the files being version controlled, though in reality, you can do this with nearly any type of file on a computer.
Enterprise organizations want to keep every version of the file and document by using a VCS. It allows you to revert files back to a previous state, revert the entire project back to a previous state, compare changes over time, see who last modified something that might be causing a problem, who introduced an issue and when, and more. Using a VCS also means that if something goes wrong or lose files, you can easily recover.
Centralized version control systems have a single server that contains all the versioned files, and a number of clients that check-in and check out files from that central place. This setup offers many advantages everyone knows to a certain degree what everyone else on the project is doing.
The most obvious disadvantage is the single point of failure (SPOF) . If the server goes down, then during the downtime nobody can collaborate or save changes they’re working on. If the central database becomes corrupted, and proper backups haven’t been kept, you lose absolutely everything. All users would remain with snapshots on their local machines.
Examples: Subversion, Perforce, etc
Distributed version control systems users or committers fully mirror the repository. If the server node crashes, any of the client repositories can be copied back up to the server to restore it. Every clone is really a full backup of all the data much like a master-less network.
In addition, many of these systems have several remote repositories. We can work with, and collaborate with different groups of people in different ways simultaneously within the same project. This allows you to set up several types of workflows that aren’t possible in centralized systems, such as hierarchical models.
Examples: Git, Mercurial, etc