Version-Control Systems for Linux
(sometimes called Source-code management = SCM or revision-control systems = RCS)
Last updated: Sun Jan 6 01:50:25 PST 2008
This listing of Linux VCS tools concentrates on VCS as a category distinct from project management, process management, workflow management, build control, release management, trouble ticketing, CASE, and other useful but adjoining functions. I'll try to mention where such extended features are present.
Pointers () highlight entries notable in the opinion of this page's maintainer (Rick Moen, firstname.lastname@example.org), to whom complaints^Wcomments can be sent.
Bias & Other Disclaimers:
- I lack special VCS expertise. I've used many to some degree.
- Friends include Martin Pool (Bazaar), Andrew Tridgell (SourcePuller), Bram Cohen (Codeville), and Paul Mackerras (gitk).
- AllFusion Harvest Change Manager
- Arch (VCS specification)
- Barch (defunct)
- Bazaar 1.x ("baz") (defunct)
- Bazaar ("bzr")
- BK/Pro (formerly BitKeeper)
- /BriefCase 3 Toolkit
- ChangeMan DS
- Codeville ("cdv")
- cscvs (defunct)
- Discipline 4GL
- Eva (defunct)
- git and related "porcelains" (Cogito, gitweb, gitk, qgit, gct, StGIT)
- GNU Arch ("tla")
- Larch (defunct)
- Meta-CVS (defunct)
- OpenCM (defunct)
- PVCS (defunct)
- Source Integrity
- SourceOffSite Classic
- Surround SCM
AccuRev is a client-server networked, transaction-based system. Automatically versions directories. Provides changeset/transaction-oriented (as opposed to file-based) pre and post triggers that can run on both the client and the server. AccuRev, Inc. (formerly Ede Development Enterprises) is coy about pricing, but in 1999 it was US $750 for a single licence, including a year of support and updates.
Aegis is Peter Miller's transaction-based software configuration management system that enforces a development process requiring that change sets "work" before integration into the project baseline. It calls make and RCS (or similar) for software-building and repository functions. Aegis is local-oriented (non-network-aware).
Very mature. Atomic commits. Supports renames. Poor Win32 support. Heavy security focus and well-developed process integration.
Code is C. Open source (GNU GPL).
AllFusion Harvest Change Manager (Computer Associates, Inc.) (link)
AllFusion Harvest (formerly CCC/Harvest aka Change and Configuration Control/Harvest, which was published by Platinum Technology International, Inc.) is a multi-platform networked VCS that integrates with an optional build system and provides integrated problem tracking.
Arch is an advanced VCS specification with multiple, independent but compatible implementations, and several descendants/offshoots. Arch is widely considered more ambitious than Subversion, mainly on account of its support for decentralised repositories: In Arch, any branch or developer's private work area can be treated as a repository of its own, with a global name space for developers, repositories, and branches, which you then periodically merge with a central repository.
All the various Arch implementations used to be linked from Mat Kovach's Arch Wiki (formerly Michael Grubb's) — but recently (2005-04) the wiki seems to have dropped all but GNU Arch/tla and Bazaar 1.x.
ArX is Walter Landry's (no longer data-compatible) 2003 C++ reimplementation of the decentralised, networked Arch VCS specification, originally inspired in part by dissatisfaction with poor portability and other problems in Tom Lord's original shell-script-based Larch implementation. As an Arch offshoot, ArX is based on tracking deltas (changesets). Archives, patches, and revisions are cryptographically signed using gnupg signatures and SHA-256 hashes. ArX can use ftp, ssh, sftp, http, and http w/WebDAV transport. Internationalised but not localised. Centralised development can be done via a patch queue. Program ports to MacOS X, and in an "embryonic" fashion (2005-01-23) to Win32 (via Cygwin). On Linux, note (large) dependency on gnome-vfs. Beta as of 2005-04. Possibly moribund (2008).
Code is C++. Open Source (GNU GPL).
A prototype distributed system coded on Python by "Sébastien". Repository is stored in a queryable RDF database. Extensible/modifiable using plug-in delta modules for different versioning models. Version information is stored as SHA-1 hashes.
It is unclear at this point (2005-04) whether this software is publicly available in any form, let alone open source.
Barch (for "binary arch" — now defunct) was Robert Collins's (early) attempt at a compatible C++ implementation of the Arch VCS specification — inspired in part by the need to transcend technical and portability limitations in Tom Lord's then-current shell-script-based implementation, Larch. The project appears to have stalled as of Collins's 0.0.6-DEVEL code released on 2002-12-29. However, more recently, Collins created Bazaar 1.x (now defunct).
Code is C++. Open source (GNU GPL).
Bazaar 1.x (baz) (link)
Bazaar 1.x (executable name "baz") was Robert Collins's fork for Canonical, Ltd. of Tom Lord's GNU Arch ("tla") C-language implementation of the Arch VCS specification.
It aimed to combine the essential features of GNU Arch ("tla") with user interface improvements and Win32 support: Subversion-like diff, switch, import, export, and log commands. A single merge command allowed merging between arbitrary branches, daily builds, internationalisation, Python bindings, Win32 binaries and an MS-Windows GUI, an annotate/blame/praise command, comprehensive documentation, and UI simplification. History was stored separately from the working directory.
As of 2005-08, Canonical decided to de-emphasise work on Bazaar 1.x, put that codebase in maintenance mode, and concentrate on Bazaar ("bzr"), formerly Bazaar 2, as the true long-term successor for GNU Arch/tla. Then, some time during 2006, Bazaar 1.x was discontinued entirely.
Code is C. Open source (GNU GPL).
Bazaar (executable name "bzr"), initially called Bazaar-NG, later called Bazaar 2, is Martin Pool's networked, fully distributed, changeset-oriented variant implementation / offshoot, coded in Python for Canonical, Ltd., based on the Arch VCS specification.
It aims to combine the best feature of all the new VCSes (darcs, Subversion, GNU Arch/tla, Quilt, and BK/Pro) "into a single coherent and simple system", and has a simple CVS-like syntax for common operations like add, mv, diff, status, commit, log, merge, etc. Stores/checks SHA-1 hashes of all patches and hashes of the tree state in each revision. Hashes can optionally be signed. Stores changesets (deltas). Control files are stored inside the working directory tree. Changesets can be sent/received over e-mail, optionally gnupg-signed. Renames, deletions, binaries are versioned. Uses hashes for integrity checks, not for identity. Repository data are stored encoded in UTF-8. Partial trees and per-file histories are not supported.
Though there is no dedicated network server program module, there is built-in support for "pull" synchronisation over a variety of network mechanisms; by default, there is both "push" and "pull" support over sftp transport only, and sftp is supported only if you install the bzrtools extensions (plus Python modules paramiko and pyCrypto).
Bazaar is also the successor to the former Bazaar 1.x ("baz") project, and all baz repositories should by now (2006) have been converted.
Change history is append-only. Tool lets you "cherry-pick" changes from one branch to another. As a further advance on Bazaar 1.x, each checkout is fully usable as a repository. At this date (2005-04), bzr is not yet feature-complete. Modular design: library + command-line client, making feasible use via library call from any other client. All development takes place on branches, which are the highest-level grouping. Forking of branches is by intention frequent and has been made easy. Three-way merge algorithm. Allows merges within an arbitrary graph. History-sensitive merges allow safe repeated merges, merges across renames, and mutual merges between parallel lines. Checkouts default to the last archive you pulled from (as with darcs and BK/Pro).
Bazaar (v. 0.7) was one of three VCSes seriously considered for hosting the very large OpenSolaris Project, and was eliminated on grounds of slowness and high memory usage compared to git and (the winner) Mercurial.
Trent Buck published a comparison of darcs and Bazaar (bzr) in 2006.
Code is Python script: Tool should run anywhere that Python 2.4 and above runs (i.e., Unixes including MacOS X, Win32, etc.). Open source (GNU GPL).
Networked, changeset-oriented system (executable name "bk"). Atomic commits. Supports renames. Supports file/directory copies that retain version history. Has some advanced merge methods, based on line identity. Uses time, rather than sequence, in some places. Repository, which uses weave storage, gets fully replicated onto each developer's system (multiple repositories / staging areas). History is stored with the working directory. Checked-out files must be marked before editing. Patches from others can retain their separate identity even after integration (are not collapsed/rolled up). Has default GUI. Emits lots of noise messages, and has lots of weird commands. Requires both per-file and per-changeset commands. Very space-efficient storage. Has fine-grained pre- and post-event triggers. Can remotely find status of a tree, e.g. parent, number of comitters, versioned files, extras, modified, etc. Binary-only in recent versions. Was used by the majority of core Linux kernel developers until 2005-04, although some declined for licensing and other reasons. See: analysis of architectural advantages over competitors.
Commercial version is either buy or lease: Lease is US $1000 to US $1750 annually per seat. Purchase is US $2800/seat to US $5800/seat. Pricing depends on quantity. One person who posted a BitMover price list was threatened (http://yro.slashdot.org/comments.pl?sid=41614&cid=4396950) with a copyright-violation lawsuit. Actual pricing may differ, and may depend on sales negotiations. BitMover CEO Larry McVoy has addressed BitKeeper pricing on the kernel mailing list.
As of 2004, the commercial version, and not just the gratis-usage version (below), likewise proved to be subject to gaining more restrictive conditions over time: Developers who are considered likely to assist in development of competing VCSes are, starting 2004, refused the right to buy a copy.
BitMover CEO Larry McVoy claimed in 2005-04 that his firm regards hosted projects' metadata, e.g., who did which changes and when (the projects' change history), as proprietary to BitMover, Inc., rather than being customer data.
It also recently (2005) came to light that BitMover has some undisclosed patents.
As of 2005-09, potential BitMover customers should be warned there are still ongoing reports of threatening letters sent to BK/Pro commercial licensees whose staff separately perform development work on open-source VCSes. (In the case linked to, the coder's employer claimed to infer in followup telephone conversation with McVoy a threat to not renew licences).
Gratis-usage version (discontinued a/o 2005-04):
Was encumbered by mandatory "Open Logging" of your metadata (privacy loss) if used with multi-user access.
Had a history of gaining more restrictive conditions over time. E.g.: The licence initially provided that, if the company's Open Logging servers ceased to function for 180 days, the software would convert to GPL, but that provision was later withdrawn. Source code access was also withdrawn. The non-compete clause was added. A provision was added (and later removed) to allow BitMover to terminate the licences of any individuals or groups whose usage is deemed to have cost BitMover over US $20,000 in support costs.
Consequently: (1) Publicly posted comments about BitKeeper were often outdated. (2) It was recommended to download the program and read its current licence agreement. (See slightly outdated licence analysis, mirror copy 1 2, for which BitMover threatened author Jack Moffitt with litigation. The reference to a mirror copy is necessary because BitMover successfully demanded suppression of Moffitt's own pages on the subject.)
Was encumbered by non-compete clause, http://lwn.net/Articles/12120/. If you or your employer develops, produces, or [re]sells a "substantially similar" competing product, you may not use it, while a BitMover licensee and for a year's time thereafter. BitMover sometimes waived this restriction for particular users. BitMover had advised some Linux kernel developers that they may not use the gratis-usage version, given their work on other VCSes. (They would have been obliged to buy the commercial version. 2005 addendum: That option has reportedly also been closed, with appending of that same non-compete clause to the commercial version, as well.)
Required in latter versions that the the hosted repositories' source code contents be available (on BitMover request) via the BitKeeper access protocol.
Allows check-out of the head (latest) version of any codebase in a public BK/Pro (BitKeeper) repository.
Access via third-party open-source tools to repository contents:
Andrew Tridgell's SourcePuller is an open source (GNU GPLv2) client and two subroutine libraries (libsp and libsccs) able to talk to BitKeeper servers (finally) with full access over the wire, using a (trivially easy) reverse-engineered implementation of the BitKeeper network-access protocols, to codebase metadata, e.g., who did which changes and when (the hosted codebases' change history). Tridgell independently developed SourcePuller to allow it (and potentially other VCSes using its library interfaces) to check out BitMover-hosted data and information in local BitKeeper repositories without the information lossage that occurs when using (e.g.) BitMover's BK-CVS gateways.
Access was for a while possible, until changes to BitKeeper's operation, using Andrea Arcangeli's openbkweb or Pavel Machek's BitBucket. The latter uses CSSC with the required patch to extract data from individual files. (Warning: openbkweb is an alphaware Python script implementing the BitKeeper HTTP access protocol, and may at any given time lag BitKeeper development too much to be functional. BitBucket is likewise pre-release, and BitMover's Larry McVoy claimed to me on 2003-11-04 that the patched CSSC no longer works on current BK/Pro / BitKeeper, though I don't have details.)
Note that McVoy threatened trademark litigation against Machek and his employer SUSE Linux AG over the fact that Machek's BitBucket Web page mentioned the BitKeeper name. Machek complied and removed replaced that name with "<prohibited word>", but it should be noted that McVoy's demand exceeded the reach of trademark law and was toothless. (Disclaimer: I am not an attorney, and the above is not professional legal advice.)
[Maintainer's personal comment: The obvious comparison to BK/Pro is IBM / Rational's very high-priced ClearCase tool, which I've used in the software industry. Having tried BitKeeper for a bit, I found it technically superior in every way — and it's dramatically cheaper. (On the other hand, 2005 has seen the rise of the remarkable, fast, stable open-source VCS "Mercurial", which should certainly be considered strongly, having much the same strengths except paid technical handholding.)
This document's entry for BK/Pro / BitKeeper initially had several mis-statements of fact, unflattering to the company, that I'd picked up by repeating uncritically some Linux developers' on-line assertions. I regret those errors, and caution people to be skeptical of such claims.]
Bitsafe is a networked VCS coded in Java (JRE/JDK in version 1.4.2 or later required) and back-ended into either Oracle RDBMS or SAP-DB for its repository.
Code is Java bytecode. Proprietary.
/BriefCase 3 Toolkit (Applied Computer Sciences, Inc.) (link)
/BriefCase 3 Toolkit is ACSi's enhanced networked variant on RCS wrapped inside a comprehensive development, release, and lifecycle toolkit. Network access is via rsh transport for coordination of client and server-side scripts, and NFS & pipes for data transport. NFS support has a well-developed locking structure. Administrative and private user tag mechanisms are provided. Client-side work areas can have multiple local replicas, to work on different releases and/or aspects of a project. Import tools are provided for SCCS, CVS, RCS and PVCS data.
Code is Korn shell and awk scripts. Open source (GNU GPL).
CBE (Code Building Environment) is Thomas Neumann's VCS coded in pure Java with integrated software build functions. Functionality is roughly similar to that of CVS with some new features like renaming files (while still keeping the history) and using a database as backend (optional). Code is said to be alpha-stage (2005-04).
Code is Java. Open source (GNU GPL).
ChangeMan DS (Serena Software, Inc.) (link)
ChangeMan DS is a networked VCS integrated with build control, release management, a programmers' editor, software-distribution tools, and process control. It also integrates with SAP for packaged application management, and with various third-party IDEs. Serena Software is coy about pricing.
The product was formerly known as ChangeMan and before that as Diamond CM — because it was written by Diamond Optimum Systems, which was acquired by Serena Software. (Even earlier, during its origins as an HP-3000 / HP/UX tool, it was called VCS-UX.)
ClearCase is a networked VCS whose repository one accesses using a quasi-filesystem of its own design, with integration to external software-build tools and adding some of its own. Supports advanced 3-way merge, versioning of any object (including directories), parallel builds distributed over a network, and triggers for local site customising. Linux usage requires loading a proprietary kernel module, said to freeze up frequently (at least that was true around 2001, not confirmed recently), and compatible only with particular kernels: See the ClearCase Linux Installation Guide Whitepaper for compatibility details.
They're extremely coy about pricing; probably you have to haggle on site-wide terms with their sales team. One claim is that ClearCase licenses tend to cost around US $5000/seat plus 20% per year for support.
ClearCase's history goes back to 1984, when a team at Apollo Computer created DSEE (Domain Software Engineering Environment), a VCS/build system. At the time of HP's purchase of Apollo, they left and formed Atria Software, which then merged with Pure Software, to form PureAtria, which was then bought by Rational Software. In 2002-12, Rational Software was bought by IBM Corp.
CM+ integrates networked VCS with process control, build control, configuration management, product management, document management, problem tracking, activity tracking, requirements tracking, and release control. Neuma Technology is coy about pricing.
CMZ is a local-oriented (non-network-aware) system, supporting a wide range of VCS, coding, editing, and library-management functions. Linux binary is PPC-only (no x86).
Binary-only. Gratis non-commercial usage. Proprietary.
Codeville (executable name "cdv") is Bram and Ross Cohen's fully decentralised (networked) VCS with some advanced merge methods, based on line identity: two-way merge with history. (It allows you to update from or commit to any repository at any time, with no unnecessary re-merges. Supports offline commits: Supports a workflow model where the repository is centralized, but the working tree is used as a branch.)
Repository is stored in a binary BerkeleyDB database. History is stored in the form of changes from old hashed versions. Support for non-ASCII files and some metadata (e.g., execute bit) are still (2005-08) pending. SRP as authentication protocol, network access via (if I understand correctly) custom, built-in network transport to the "cdvserver" piece on TCP port 6601. File and directory renaming are supported. Code is now (2005-08) solid, with a small to-do list remaining. Still has nearly nil built-in documentation, and only a little more on the project Web site. Very well-designed but very unusual merge algorithm (aforementioned two-way merge with history).
Code is Python script (Python 2.3 and up, BerkeleyDB 4.1 and up). Open source (newer BSD licence).
Control-CS (Network Concepts, Inc.) (link)
Control-CS is a networked version-management system. (Earlier version was called Control.) Linux has server-end tool only; client-end software exists only for Win32.
cscvs (now defunct) was a networked, decentralised VCS coded in Python, using CVS as a back-end storage repository, imposing on top of CVS atomic changeset semantics (and with easy migration to arch).
Code is Python script. Open source (BSD-style licence).
CSSC (Compatibly Stupid Source Control) is a simple local-oriented (non-network-aware) reimplementation of the old SCCS (Source Code Control System) system from early Unix (pre-RCS), mostly used for access to old repositories (being not recommended for new data repositories), and (for a while but reportedly not any more), with minor modification, to BitKeeper repositories. Uses weave storage, which makes it an excellent foundation