This content is part of the Essential Guide: Get the most out of version control in software engineering

Select between distributed version control systems and tools

Before you branch out with a new version control tool, assess the pros and cons of these different options, and make sure to ask for developers' opinions.

Intuitive version control is essential for application success and, by extension, for the business. Enterprises that follow strict version control policies can reduce resource time, duplication of work efforts and chaos -- in other words, pulling one's hair out in frustration.

Version control benefits include better team organization and productivity. In many development teams, programmers and testers must manage multiple versions of the software, as well as how those releases differ; it's a large undertaking to keep organized and avoid the trap of having to do work twice, if you did it on the incorrect release.

Distributed version control systems and tools help developers track code, manage simultaneous branch check-ins, and undo things -- a capability used by nearly all development teams. Tracked code changes also save resource time when developers attempt code reviews or reuse components.

When you review version control systems and tools, let developers try out each one to determine which best meets the team's needs. Developers will only use the tool if it's deemed useful, so give them the power to choose.

To narrow the viable choices from the vast field of version control systems and tools, start with the two primary types on the market.


Centralized version control systems (CVCSes) enable developers on disparate systems to collaborate. CVCS choices, such as Concurrent Versions System, Subversion and Perforce, contain a single server with all the code file versions. Developers securely check out files from the central server, do their coding and then check the files back in. In this manner, when programmers check out files, they get the latest checked-in file.

CVCS tools were the industry standard for decades. But developers needed more flexible storage that enables backing code up to protect it in case of loss or backing it out to restore to a previous state.

Distributed version control systems (DVCSes) are the newer breed of tools. With DVCS tools, developers don't simply check out files, which then change on a central server. Instead, developers work in a system that mirrors the full repository of files, meaning all of the source code. Multiple servers provide file storage, which protects code against downtime or other adverse events.

How DCVS works
Learn how distributed version control works.

DVCSes include the well-known version control tool Git, as well as Bazaar, Darcs and Mercurial. Distributed systems secure files, and any developer who checks out the latest snapshots of files can copy them back to the server if needed. Each code checkout serves as a backup of the entire file system. Additionally, distributed version control tools provide organizational flexibility, as they enable remote repositories anywhere; developers can collaborate with their associates around the world simultaneously within the same project space. With this flexibility, developers can alter their workflow processes as needed.

Once you choose what type of system you want, dig into these three popular version control tools for enterprises.


Git is an open source DVCS tool primarily used to track source code changes and coordinate development work for projects. You can use Git for distributed version control on any set of files. Developers favor Git for its simple, clear-cut design, as well as its speed, efficiency, support for parallel branches and ability to handle projects of any size. Git is fully distributed; it does not include any CVCS features.

One distinct feature of Git is how it treats data as snapshots in a file system. When developers commit changes or save in a project, Git snapshots the file and stores references -- but only if the file has changed. Git checksums each file when it's stored and then identifies the file by that checksum to recognize changes. This feature means you cannot lose information or experience file corruption without Git recording it.

AWS CodeCommit

AWS CodeCommit is a managed DVCS option in the public cloud. Like most Amazon cloud services, it's built on a secure and scalable system; when you need more server space, you can add it. Similar to Git, CodeCommit works anywhere, so developers can collaborate using multiple servers within a project space.

AWS CodeCommit supports Git commands and tools. The AWS cloud stores all project files. Basically, CodeCommit is like Git combined with the features and benefits of a managed cloud system. Developers can manage pull requests, branches and file merges. Additionally, AWS CodeCommit stores all application support files, such as images and libraries, so all application components live in the same, secured access point.


Apache Subversion is an open source versioning and revision control system distributed under the Apache License. Subversion is an old-school CVCS with a long history of solid performance.

With Subversion, a development team can maintain current and historical versions of any types of files, including source code, user documentation, images, notes and webpages. Developers commit changes directly to the central server repository. Subversion breaks development work into trunks, branches and tags. The trunk is the current, stable and tested version of the code. The branches represent developers' new code; they copy the trunk and then code on their branch. Each developer tags code to make it easier to do code review or revert code changes if necessary. Once tagged, the developer merges the branch into the trunk.

Like all CVCSes, a single central server for Subversion can prove problematic if it fails or goes offline for a length of time.

Ultimately, the features that matter most to your development team dictate which distributed version control tool you choose. When planning to purchase a tool, you should invite a solid representation of developers to chime in on the features that matter most to them. Consider which tool will provide developers with the fastest commits, little or no interference or downtime when checking out or checking in code, and offline access.

Dig Deeper on Software development lifecycle

Cloud Computing
App Architecture