CVS, SVN, Git, Mercurial, Trunk, Tags, Branches, Forks ?

CVS (Concurrent Versioning System) is a free software revision control system in the field of software development. Version control system software keeps track of all work and all changes in a set of files, and allows several developers to collaborate. Dick Grune developed CVS in the 1980s.

CVS became popular in the open source software world and is released under the GNU General Public License. In the early 2000s, many users of CVS began to replace it with Subversion (SVN), which was explicitly designed to circumvent some of the limitations of CVS. As of January 2009, many open source projects have replaced Subversion or CVS with a distributed version control system, such as Git or Mercurial.

Subversion, as an open source version control system, will become a project of the Apache Software Foundation and remains of interest for a lot of projects.

Trunk, Tags and Branches are names of directories commonly used in revision control systems, but there exist no agreed definition. I have the following understanding:

  • Trunk : Main development area. This is where the next major release of the code lives, and generally has all the newest features.
  • Branches : Every time a major version is released, it gets a branch created. This allows developers to fix bugs and to make a new release without having to release the unfinished or untested features.
  • Tags : Every time you release a version (final release, release candidates (RC), and betas) you make a tag for it. This gives you a point-in-time copy of the code as it was at that state, allowing you to go back and reproduce any bugs if necessary in a past version, or re-release a past version exactly as it was.
  • Forks : Separate projects that share a common origin with other source code,e.g. major branches that are not accepted into the trunk by the project stakeholders.

A discussion about this topic can be viewed at the stackoverflow website, more detailed informations are available in the conference paper Streamed Lines: Branching Patterns for Parallel Software Development.