Version Control Software
On this page, you will find useful information about version control software. Read about the advantages and disadvantages of the most used software tools.
What is version control software?
Version control software (VCS) is a tool that records changes to a set of files over time so that you can recall any earlier version, see who changed what, and combine work from many people without overwriting each other. It is the backbone of any collaborative software workflow and is essential the moment more than one person touches a codebase.
This page explains the two families of version control software, walks through the most widely known tools and their trade-offs, and helps you decide which one fits your project. If you want the underlying concept first, read Version Control System; to see why Git in particular won, see What is Git.
Centralized vs. distributed
Almost every VCS falls into one of two architectures, and the difference shapes everything else.
- Centralized (CVCS): a single server holds the canonical history. Clients check out a working copy and commit straight back to that server. Examples: CVS, SVN. The upside is one obvious source of truth and simple access control; the downside is that you need network access to commit, and the server is a single point of failure.
- Distributed (DVCS): every clone is a full copy of the entire repository, including all history. You commit, branch, and view history locally and offline, then sync with others when ready. Examples: Git, Mercurial, Monotone. This makes most operations instant and removes the single point of failure, at the cost of a slightly steeper mental model.
Git's distributed design is the main reason branching and committing feel instantaneous — there is no round trip to a server. Every clone you make with git clone already contains the project's complete history.
Widely used tools
Git
Git is the de facto standard distributed version control system today. It is fast, efficient, and handles projects of any size. Its distinctive strengths are cheap local branching (see git branch), a convenient staging area (see git add), and support for many workflows. It is free, open-source software.

Limitations. Support for large binary files is weak out of the box — though Git LFS addresses this. Operations can slow down on very large repositories with long histories, and the breadth of commands can feel overwhelming to newcomers.
CVS
CVS (Concurrent Versions System) is a centralized system that was historically popular but is now largely obsolete, superseded by modern distributed tools. It records the history of files and documents and runs on almost every hardware platform and operating system. It is free, open-source software.

Limitations. CVS does not verify the integrity of the repository, and it lacks atomic commits, merge tracking, and signed revisions — failings that directly motivated its successors.
SVN
SVN (Apache Subversion) is a centralized version control system that was widely used throughout the 2000s and is still found in some enterprise and legacy environments. Its features include versioned directories, atomic commits, merge tracking, first-class copy/move/rename/delete operations, a client–server model, free-form versioned metadata, full MIME support, and file locking. It is free, open-source software.

Limitations. File-modification times are not stored, filename normalization can be problematic across platforms, and there is no support for signed revisions.
Mercurial
Mercurial is a distributed version control system written largely in Python. It is fast, supports projects of any size, and has a famously predictable, easy-to-learn interface. It runs on Unix-like systems, Windows, and macOS, handles binary files well, and has strong merging and branching. It is free, open-source software.

Limitations. Python is required for all add-ons, partial check-outs are not supported, and it does not always deal well with third-party extensions.
Monotone
Monotone is a distributed version control system written in C++. It is a single-file, transactional VCS offering fully disconnected operation, history-sensitive merging, lightweight branches, low maintenance, and peer-to-peer synchronization. It runs on Linux, Solaris, macOS, Windows, and other Unix systems. It is free, open-source software.

Limitations. Without HTTP support, users cannot check out or commit from behind a proxy, and some operations — most notably the initial pull — have performance issues. Monotone is largely abandoned today and has limited modern relevance.
Quick comparison
| Tool | Architecture | Status | Notable strength | Main weakness |
|---|---|---|---|---|
| Git | Distributed | Industry standard | Speed, branching, ecosystem | Large binaries, learning curve |
| Mercurial | Distributed | Maintained, niche | Predictable, simple interface | Smaller ecosystem |
| SVN | Centralized | Legacy / enterprise | File locking, simple model | Needs server to commit |
| CVS | Centralized | Obsolete | Historical importance | No atomic commits or integrity checks |
| Monotone | Distributed | Largely abandoned | Strong integrity model | No HTTP, slow initial pull |
Which one should you choose?
For nearly every new project the answer is Git: it has the largest community, the best hosting support (GitHub, GitLab, Bitbucket), and the deepest tooling. Reach for an alternative only when a concrete constraint pushes you there:
- Mercurial — if your team prefers a smaller, more consistent command set and you are not tied to the Git ecosystem.
- SVN — if you need strict file locking for unmergeable binary assets, or you maintain an existing centralized workflow.
- CVS / Monotone — generally only when maintaining an existing legacy repository; avoid for new work.
Once you've settled on Git, the next step is to install it and learn how source code management works in practice.