| SCM feature: | Bazaar [-] | Git [-] | Mercurial [-] |
Add to comparison:
+CVS +AccuRev +Aegis +AllChange +Arch +BitKeeper +ClearCase +CM+ +CMSynergy +Co-Op +Darcs +LibreSource Synchronizer +Monotone +OpenCM +Perforce +PureCM +SourceAnywhere +Subversion +Superversion +Surround SCM +svk +Team Foundation Server +Vesta +Visual SourceSafe |
|---|---|---|---|---|
|
Atomic Commits |
Bazaar: Yes. Commits are atomic. | Git: Yes. Commits are atomic. | Mercurial: Yes. | |
|
Files and Directories Moves or Renames |
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). | Mercurial: Yes. Renames are supported. | |
|
Intelligent Merging after Moves or Renames |
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." | 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. " | |
|
File and Directories Copies |
Bazaar: No. Copies are not supported. | Git: No. Copies are not supported. | Mercurial: Yes. Copies are supported | |
|
Remote Repository Replication |
Bazaar: Yes. | Git: Yes. This is very intrinsic feature of Git. | Mercurial: Yes. | |
|
Propagating Changes to Parent Repositories |
Bazaar: Yes. | Git: Yes. (The Linux kernel development process uses this extremely often). | Mercurial: Yes. | |
|
Repository Permissions |
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. | Mercurial: Yes. It is possible to lock down repositories, subdirectories, or files using hooks. | |
|
Changesets' Support |
Bazaar: Yes. Changesets are supported. | Git: Yes, Changesets are supported, and there's some flexibility in creating them. | Mercurial: Yes. Changesets are supported. | |
|
Tracking Line-wise File History |
Bazaar: Yes. (bzr annotate). | Git: Yes. (git blame). | Mercurial: Yes. (hg annotate) | |
|
Ability to Work only on One Directory of the Repository |
Bazaar: For checkouts: No. For checkins: Yes. | Git: No. However, commits could be restricted somewhat, see the "Repository Permissions". | Mercurial: It is possible to commit changes only in a subset of the tree. There are plans for partial checkouts. | |
|
Tracking Uncommited 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. | Mercurial: Yes. Using hg diff. | |
|
Per-File Commit Messages |
Bazaar: With respect to pure Bazaar: No. At least one plugin (bzr-gtk) supports it though. | Git: No. Commit messages are per changeset. | Mercurial: No. | |
|
Documentation |
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. | Mercurial: Very good. There is a companion book and a wiki. Every command has integrated help. | |
|
Ease of Deployment |
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. | Mercurial: Excellent. Binary packages are available for all popular platforms. Building from source requires only Python 2.3 (or later) and a C compiler. | |
|
Command Set |
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. | Mercurial: Tries to follow CVS conventions, but deviates where there is a different design. | |
|
Networking Support |
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. | Mercurial: Excellent. Uses HTTP or ssh. Remote access also works safely without locks over read-only network filesystems. | |
|
Portability |
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. | Mercurial: Excellent. Runs on all platforms supported by Python. Repositories are portable across CPU architectures and endian conventions. | |
|
Web Interface |
Bazaar: Yes, several: Loggerhead, Webserve, Bzrweb, and Trac. | Git: Yes. Gitweb is included in distribution. | Mercurial: Yes. The web interface is a bundled component. | |
|
Availability of Graphical User-Interfaces. |
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. | 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. | |
|
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. |
|