Comparison between Arch, Bazaar, Git, Darcs, Mercurial, Monotone

Back to main page

   
SCM feature: Arch [-] Bazaar [-] Git [-] Darcs [-] Mercurial [-] Monotone [-] Add to comparison: +CVS
+AccuRev
+Aegis
+AllChange
+BitKeeper
+ClearCase
+CM+
+CMSynergy
+Co-Op
+LibreSource Synchronizer
+OpenCM
+Perforce
+PureCM
+SourceAnywhere
+Subversion
+Superversion
+Surround SCM
+svk
+Team Foundation Server
+Vesta
+Visual SourceSafe
Atomic Commits
Arch: Yes. Commits are atomic. Bazaar: Yes. Commits are atomic. Git: Yes. Commits are atomic. Darcs: Yes. Commits are atomic. Mercurial: Yes. Monotone: Yes.
Files and Directories Moves or Renames
Arch: Yes. Renames are supported. Bazaar: Yes. Renames are supported for files and directories. Git: Renames are supported for most practical purposes. Git even detects renames when a file has been changed afterward the rename. However, due to a peculiar repository structure, renames are not recorded explicitly, and Git has to deduce them (which works well in practice). Darcs: Yes. Renames are supported. Mercurial: Yes. Renames are supported. Monotone: Yes. Renames are supported.
Intelligent Merging after Moves or Renames
Arch: Yes. Renames can be merged intelligently. Bazaar: Yes. Renames are intelligent. Git: No. As detailed in the Git FAQ: "Git has a rename command git mv, but that is just a convenience. The effect is indistinguishable from removing the file and adding another with different name and the same content." Darcs: Unknown. Mercurial: No. the Mercurial book says: "When you use the 'hg rename' command, Mercurial makes a copy of each source file, then deletes it and marks the file as removed. " Monotone: Unknown. FILL IN.
File and Directories Copies
Arch: No. Copies of files and directory structures are not supported. Bazaar: No. Copies are not supported. Git: No. Copies are not supported. Darcs: No. Copies of files and directory structures are not supported. Mercurial: Yes. Copies are supported Monotone: Yes. Copies are supported
Remote Repository Replication
Arch: Yes. Bazaar: Yes. Git: Yes. This is very intrinsic feature of Git. Darcs: Yes. Mercurial: Yes. Monotone: Yes.
Propagating Changes to Parent Repositories
Arch: Yes. Bazaar: Yes. Git: Yes. (The Linux kernel development process uses this extremely often). Darcs: Yes. Mercurial: Yes. Monotone: Yes.
Repository Permissions
Arch: Yes. It is possible to define permissions on access to different parts of a remote repository based on the permission systems of the underlying protocol. Bazaar: Basic access control can be implemented through a contributed hook script. ACL support for the Bazaar server is planned. Git: No, but a single server can serve many repositories. Also, UNIX permissions can be used to some extent. Darcs: No. Mercurial: Yes. It is possible to lock down repositories, subdirectories, or files using hooks. Monotone: Yes. It is possible to restrict incoming changes from certain sources to be performed only in certain parts of the repository.
Changesets' Support
Arch: Yes. Changesets are supported. Bazaar: Yes. Changesets are supported. Git: Yes, Changesets are supported, and there's some flexibility in creating them. Darcs: Yes. Changesets are supported. Mercurial: Yes. Changesets are supported. Monotone: Yes. Changesets are supported.
Tracking Line-wise File History
Arch: Not in the command line client, but ViewARCH, a web-interface for Arch, has it. Bazaar: Yes. (bzr annotate). Git: Yes. (git blame). Darcs: Yes. (darcs annotate) Mercurial: Yes. (hg annotate) Monotone: Yes, as of version 0.19.
Ability to Work only on One Directory of the Repository
Arch: It is possible to commit only a certain directory. However, one must check out the entire repository as a whole. Bazaar: For checkouts: No. For checkins: Yes. Git: No. However, commits could be restricted somewhat, see the "Repository Permissions". Darcs: It is possible to commit only a certain directory. However, one must check out the entire repository as a whole. Mercurial: It is possible to commit changes only in a subset of the tree. There are plans for partial checkouts. Monotone: It is possible to commit changes only in a subset of the tree. However, one must extract the entire tree to work on it.
Tracking Uncommited Changes
Arch: Yes, using "tla changes". Bazaar: Yes, using "bzr diff". Git: Yes. Also, branches are very lightweight in Git, and could be considered a kind of storage for "uncommitted" code in some workflows. Darcs: Yes, using "darcs whatsnew". Mercurial: Yes. Using hg diff. Monotone: Yes. In a similar fashion to CVS.
Per-File Commit Messages
Arch: No. Bazaar: With respect to pure Bazaar: No. At least one plugin (bzr-gtk) supports it though. Git: No. Commit messages are per changeset. Darcs: No. Mercurial: No. Monotone: Yes. It is possible to attach a comment to a certain file at a certain revision.
Documentation
Arch: Medium. There are two online tutorials and a comprehensive online documentation. The command line client also supplies a reference page. However, some of the documentation is out of date or incomplete. Bazaar: Excellent. Apart from online help in the command line client there exist tutorials, a reference card ("Quick Start Guide"), several full fledged guides and references, and documents on specialized topics, such as migration from other VCS systems and different workflows. The documentation comes in html and plain-text formats. The API of the underlying library is fully documented. In the UI design of the command line client special attention was paid to make it easy to get started with Bazaar. Git: Medium. The short help is too terse and obscure. The man pages are extensive, but tend to be confusing. The are many tutorials. Darcs: Good. The manual contains a brief tutorial and a solid reference. Every sub-command can print its usage. Because the command-set is small and the model is simple, many users find it easy to get started. Mercurial: Very good. There is a companion book and a wiki. Every command has integrated help. Monotone: Good. There's an overview and tutorial written in Texi, and a man page. The client supplies documentation for every command.
Ease of Deployment
Arch: Excellent. An arch service is nothing but a filesystem-space hosted by any of its supported protocols (FTP, SFTP, WebDAV, etc.). The arch client is written in C, and is portable across UNIX systems (and on Win32 only with a UNIX emulation layer). Bazaar: Very easy. Bazaar has an installer for MS Windows and packages for some major Linux distributions, FreeBSD, and Mac OS X. The dependencies for manual installation are listed on the Bazaar website. Git: Good. Binary packages are available for modern platforms. C compiler and Perl are required. Requires cygwin on Windows, and has some UNIXisms. Darcs: Very good. darcs requires few external libraries, however you need the Glasgow Haskell Compiler if you cannot find a binary. To start working, just "darcs init". Mercurial: Excellent. Binary packages are available for all popular platforms. Building from source requires only Python 2.3 (or later) and a C compiler. Monotone: Excellent. It is possible to copy or compile the executable to the user's machine, without any configuration or external dependencies.
Command Set
Arch: Many commands are compatible with CVS or BitKeeper. However, there are many other commands for it for different uses. Aliasing of commands is possible so it it may be possible to make it more compatible. Bazaar: Tries to follow CVS conventions, but deviates where there is a different design. Git: Command set is very feature-rich, and not compatible with CVS. Darcs: The command set is fairly compact and the core commands are easy to understand. Follows CVS in a few places, but since the model is different most commands are unique. Mercurial: Tries to follow CVS conventions, but deviates where there is a different design. Monotone: Tries to follow CVS conventions, but deviates where there is a different design.
Networking Support
Arch: Excellent. Arch can utilize a multitude of protocols for its service, which is nothing but a dumb remote filesystem server. Currently supported protocols include FTP, SFTP, WebDAV (remote file access over HTTP), as well as any remote filesystem protocol (NFS, SMB). Bazaar: Excellent. Works natively over HTTP (read-only), FTP and SFTP without having Bazaar installed at the remote end. Works over HTTP, SSH and a custom protocol when talking to a remote Bazaar server. Supports RSYNC and WebDAV (experimental) through plugins. Git: Excellent. Can use native Git protocol, but works over rsync, ssh, HTTP and HTTPS also. Darcs: Good. Darcs supports getting patches over HTTP, and getting and sending patches over SSH and email. Mercurial: Excellent. Uses HTTP or ssh. Remote access also works safely without locks over read-only network filesystems. Monotone: Good. Uses a custom protocol called "netsync".
Portability
Arch: Good. The source is portable across all UNIXes, but requires a UNIX emulation layer on Windows. (need to verify). A service can be hosted on any platform that sports a suitable Internet service. Bazaar: Works on MS Windows, Linux, Mac OS X, FreeBSD, UNIX, and basically on any system that has a recent Python port. With case-insensitive file systems there are some issues that can be avoided by using a graphical frontend. On MS Windows there is a plugin to support tracking of symlinks even if they are not supported natively by the file system. Git: The client works on most UNIXes, but not on native MS-Windows. The cygwin build seems to be workable, though. Darcs: Very good. Supports many UNIXes, Mac OS X, and Windows, and is written in a portable language. Mercurial: Excellent. Runs on all platforms supported by Python. Repositories are portable across CPU architectures and endian conventions. Monotone: Excellent. Executable is portable across all UNIXes and Win32.
Web Interface
Arch: There's ViewARCH, and ArchZoom which are works in progress. Bazaar: Yes, several: Loggerhead, Webserve, Bzrweb, and Trac. Git: Yes. Gitweb is included in distribution. Darcs: darcs.cgi is included in the distribution. Mercurial: Yes. The web interface is a bundled component. Monotone: No.
Availability of Graphical User-Interfaces.
Arch: There are tlator, Octopy, and ArchWay and possibly others under development. Bazaar: There are several graphical frontends in development, see the Bazaar Plugins page and the Third-party Tools page. Notable are QBzr (Qt) and bzr-gtk (GTK+), which can be considered beta quality. Work is also being done on integrating Bazaar with Windows Explorer, Eclipse, Nautilus, and Meld. Git: Gitk is included in distribution. Qgit and Git-gui tools are also available. Darcs: None to speak of. (There is a modest graphical interface to a few commands in the distribution, but it is not being developed currently.) Mercurial: History viewing available with hgit extension; check-in extension (hgct) makes committing easier. Some third-party IDEs and GUI tools (e.g. eric3, meld) have integrated Mercurial support. Monotone: No GUIs are available.
 


Information taken from Better SCM Initiative website by Shlomi Fish (shlomif@iglu.org.il).

Reorganized for usability by Alexey Mahotkin (Version Control Blog) in 2008.

 

Creative Commons License
This work is licensed under a Creative Commons License.