Mercurial
Encyclopedia
Mercurial is a cross-platform
, distributed revision control
tool for software developer
s. It is mainly implemented using the Python programming language
, but includes a binary diff
implementation written in C
. It is supported on Windows
and Unix-like
systems, such as FreeBSD
, Mac OS X
and Linux
. Mercurial is primarily a command line program but graphical user interface
extensions are available. All of Mercurial's operations are invoked as arguments to its driver program hg, a reference to the chemical symbol
of the element mercury
.
Mercurial's major design goals include high performance and scalability, decentralized, fully distributed collaborative development, robust handling of both plain text
and binary file
s, and advanced branching and merging capabilities, while remaining conceptually simple. It includes an integrated web interface. Mercurial has also taken steps to ease the transition for SVN users.
The creator and lead developer of Mercurial is Matt Mackall. Mercurial is released as free software
under the terms of the GNU GPL v2.
-based protocol that seeks to reduce round-trip requests, new connections and data transferred. Mercurial can also work over ssh
where the protocol is very similar to the HTTP-based protocol. By default it uses a 3-way merge before calling external merge tools.
.
BitKeeper had been used for the version control requirements of the Linux kernel project. Mackall decided to write a distributed version control system as a replacement for use with the Linux kernel. This project started a few days after another project called Git
, initiated by Linus Torvalds
with similar aims.
The Linux kernel project decided to use Git
rather than Mercurial, but Mercurial is now used by many other projects (see below).
Cross-platform
In computing, cross-platform, or multi-platform, is an attribute conferred to computer software or computing methods and concepts that are implemented and inter-operate on multiple computer platforms...
, distributed revision control
Distributed revision control
A distributed revision control system , distributed version control or decentralized version control keeps track of software revisions and allows many developers to work on a given project without necessarily being connected to a common network.-Distributed vs...
tool for software developer
Software developer
A software developer is a person concerned with facets of the software development process. Their work includes researching, designing, developing, and testing software. A software developer may take part in design, computer programming, or software project management...
s. It is mainly implemented using the Python programming language
Python (programming language)
Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability. Python claims to "[combine] remarkable power with very clear syntax", and its standard library is large and comprehensive...
, but includes a binary diff
Diff
In computing, diff is a file comparison utility that outputs the differences between two files. It is typically used to show the changes between one version of a file and a former version of the same file. Diff displays the changes made per line for text files. Modern implementations also...
implementation written in C
C (programming language)
C is a general-purpose computer programming language developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system....
. It is supported on Windows
Microsoft Windows
Microsoft Windows is a series of operating systems produced by Microsoft.Microsoft introduced an operating environment named Windows on November 20, 1985 as an add-on to MS-DOS in response to the growing interest in graphical user interfaces . Microsoft Windows came to dominate the world's personal...
and Unix-like
Unix-like
A Unix-like operating system is one that behaves in a manner similar to a Unix system, while not necessarily conforming to or being certified to any version of the Single UNIX Specification....
systems, such as FreeBSD
FreeBSD
FreeBSD is a free Unix-like operating system descended from AT&T UNIX via BSD UNIX. Although for legal reasons FreeBSD cannot be called “UNIX”, as the direct descendant of BSD UNIX , FreeBSD’s internals and system APIs are UNIX-compliant...
, Mac OS X
Mac OS X
Mac OS X is a series of Unix-based operating systems and graphical user interfaces developed, marketed, and sold by Apple Inc. Since 2002, has been included with all new Macintosh computer systems...
and Linux
Linux
Linux is a Unix-like computer operating system assembled under the model of free and open source software development and distribution. The defining component of any Linux system is the Linux kernel, an operating system kernel first released October 5, 1991 by Linus Torvalds...
. Mercurial is primarily a command line program but graphical user interface
Graphical user interface
In computing, a graphical user interface is a type of user interface that allows users to interact with electronic devices with images rather than text commands. GUIs can be used in computers, hand-held devices such as MP3 players, portable media players or gaming devices, household appliances and...
extensions are available. All of Mercurial's operations are invoked as arguments to its driver program hg, a reference to the chemical symbol
Chemical symbol
A chemical symbol is a 1- or 2-letter internationally agreed code for a chemical element, usually derived from the name of the element, often in Latin. Only the first letter is capitalised...
of the element mercury
Mercury (element)
Mercury is a chemical element with the symbol Hg and atomic number 80. It is also known as quicksilver or hydrargyrum...
.
Mercurial's major design goals include high performance and scalability, decentralized, fully distributed collaborative development, robust handling of both plain text
Plain text
In computing, plain text is the contents of an ordinary sequential file readable as textual material without much processing, usually opposed to formatted text....
and binary file
Binary file
A binary file is a computer file which may contain any type of data, encoded in binary form for computer storage and processing purposes; for example, computer document files containing formatted text...
s, and advanced branching and merging capabilities, while remaining conceptually simple. It includes an integrated web interface. Mercurial has also taken steps to ease the transition for SVN users.
The creator and lead developer of Mercurial is Matt Mackall. Mercurial is released as free software
Free software
Free software, software libre or libre software is software that can be used, studied, and modified without restriction, and which can be copied and redistributed in modified or unmodified form either without restriction, or with restrictions that only ensure that further recipients can also do...
under the terms of the GNU GPL v2.
Technical information
Mercurial uses SHA-1 hashes to identify revisions. For repository access via a network, Mercurial uses an HTTPHypertext Transfer Protocol
The Hypertext Transfer Protocol is a networking protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web....
-based protocol that seeks to reduce round-trip requests, new connections and data transferred. Mercurial can also work over ssh
Secure Shell
Secure Shell is a network protocol for secure data communication, remote shell services or command execution and other secure network services between two networked computers that it connects via a secure channel over an insecure network: a server and a client...
where the protocol is very similar to the HTTP-based protocol. By default it uses a 3-way merge before calling external merge tools.
History
Mackall first announced Mercurial on April 19, 2005. The impetus for this was the announcement earlier that month by Bitmover that they were withdrawing the free version of BitKeeperBitKeeper
BitKeeper is a software tool for distributed revision control of computer source code. A distributed system, BitKeeper competes largely against other systems such as Git and Mercurial...
.
BitKeeper had been used for the version control requirements of the Linux kernel project. Mackall decided to write a distributed version control system as a replacement for use with the Linux kernel. This project started a few days after another project called Git
Git (software)
Git is a distributed revision control system with an emphasis on speed. Git was initially designed and developed by Linus Torvalds for Linux kernel development. Every Git working directory is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on...
, initiated by Linus Torvalds
Linus Torvalds
Linus Benedict Torvalds is a Finnish software engineer and hacker, best known for having initiated the development of the open source Linux kernel. He later became the chief architect of the Linux kernel, and now acts as the project's coordinator...
with similar aims.
The Linux kernel project decided to use Git
Git (software)
Git is a distributed revision control system with an emphasis on speed. Git was initially designed and developed by Linus Torvalds for Linux kernel development. Every Git working directory is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on...
rather than Mercurial, but Mercurial is now used by many other projects (see below).
Related software
- GUIGraphical user interfaceIn computing, a graphical user interface is a type of user interface that allows users to interact with electronic devices with images rather than text commands. GUIs can be used in computers, hand-held devices such as MP3 players, portable media players or gaming devices, household appliances and...
interfaces for Mercurial include:- Hgk (tcl/tk): This is implemented as a Mercurial extension, and is part of the official version. This viewer displays the directed acyclic graphDirected acyclic graphIn mathematics and computer science, a directed acyclic graph , is a directed graph with no directed cycles. That is, it is formed by a collection of vertices and directed edges, each edge connecting one vertex to another, such that there is no way to start at some vertex v and follow a sequence of...
of the changesets of a Mercurial repository. This viewer can be invoked via the commandhg view
, if the extension is enabled. hgk was originally based on a similar tool for Git called gitk. There is an hgk replacement named hgview that is written in pure python and provides both gtk and qt interfaces. - TortoiseHgTortoiseHgTortoiseHg is a Mercurial revision control client, implemented as a Windows Explorer and Nautilus shell extension. The underlying client can be used on the command line...
: TortoiseHg is a shell extension and a series of applications for the Mercurial distributed revision control system. It is available for Windows Explorer and GNOME Nautilus. - Murky: A Mac OS X GUI in Objective-C 2.0, runs on Mac OS X 10.5 and later.
- MacMercurial: A Mac OS X GUI '"not intended to completely replace command line use of Mercurial, only to ease the most common Mercurial operations," for Mac OS X 10.4 or later.
- MacHg: MacHg is a free and fast multithreaded front end for Mac OS X 10.6 and later.
- SourceTree: A commercial Mac OS X GUI client that works with both Mercurial and Git.
- Hgk (tcl/tk): This is implemented as a Mercurial extension, and is part of the official version. This viewer displays the directed acyclic graph
- Related tools for merging include (h)gct (Qt) and Meld.
- The convert extension allows import from CVSConcurrent Versions SystemThe Concurrent Versions System , also known as the Concurrent Versioning System, is a client-server 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 ...
, DarcsDarcsDarcs is a distributed revision control system created by David Roundy; it was designed to replace traditional, centralized source control systems such as CVS and Subversion...
, GitGit (software)Git is a distributed revision control system with an emphasis on speed. Git was initially designed and developed by Linus Torvalds for Linux kernel development. Every Git working directory is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on...
, GNU ArchGNU archIn computing, GNU arch is a distributed revision control system that is part of the GNU Project and licensed under the GNU General Public License...
, MonotoneMonotone (software)Monotone is an open source software tool for distributed revision control. Monotone tracks revisions to files, groups sets of revisions into changesets, and tracks history across renames.The focus of the project is on integrity over performance...
, PerforcePerforcePerforce is a commercial, proprietary, centralized revision control system developed by Perforce Software, Inc.-Architecture:Perforce is a client/server system.The server manages a central database and a master repository of file versions....
, Bazaar and Subversion repositories. - Microsoft Visual StudioMicrosoft Visual StudioMicrosoft Visual Studio is an integrated development environment from Microsoft. It is used to develop console and graphical user interface applications along with Windows Forms applications, web sites, web applications, and web services in both native code together with managed code for all...
supports Mercurial with the VisualHG and HgSccPackage plugins. - NetBeansNetBeansNetBeans refers to both a platform framework for Java desktop applications, and an integrated development environment for developing with Java, JavaScript, PHP, Python, Groovy, C, C++, Scala, Clojure, and others...
supports Mercurial from Version 6. - EclipseEclipse (software)Eclipse is a multi-language software development environment comprising an integrated development environment and an extensible plug-in system...
supports Mercurial with the MercurialEclipse plugin.
Source code hosting
The following websites provide free source code hosting for Mercurial repositories:- BitbucketBitbucketBitbucket is a web-based hosting service for projects that use either the Mercurial or Git revision control systems. Bitbucket offers both commercial plans and free accounts...
- CodePlex
- Google CodeGoogle CodeGoogle Code is Google's site for developer tools, APIs and technical resources. The site contains documentation on using Google developer tools and APIs—including discussion groups and blogs for developers using Google's developer products....
- JavaForgeJavaForgeJavaForge.com is a non profit and free open source software development community with a hosting portal for open source projects. It hosts software development services such as Project related Web hosting, Document Management, Wiki, Forum, Online chat, Issue tracking integrated with optional Git,...
by Intland SoftwareIntland SoftwareIntland Software is a provider of enterprise-class collaboration solutions. The company is headquartered in Stuttgart, Germany and has an office in Sunnyvale, California.- History :Intland Software was formally founded in 1999 by two industry veterans...
(with pull requests to control source code contribution) - Project KenaiProject KenaiProject Kenai is a collaborative hosting site for free and open source projects, launched by Sun Microsystems and now owned by Oracle. The service will be discontinued move the existing Kenai.com projects over to the Java.net domain for public use as part of Oracle's restructuring of...
by OracleOracleIn Classical Antiquity, an oracle was a person or agency considered to be a source of wise counsel or prophetic predictions or precognition of the future, inspired by the gods. As such it is a form of divination.... - SourceForgeSourceForgeSourceForge Enterprise Edition is a collaborative revision control and software development management system. It provides a front-end to a range of software development lifecycle services and integrates with a number of free software / open source software applications .While originally itself...
- AssemblaAssemblaAssembla is a collaborative project management service for open-source and commercial software. The service rents development applications to other companies online, reducing the cost of software development.-History:...
- GNU SavannahGNU SavannahGNU Savannah is a project of the Free Software Foundation initiated by Loïc Dachary, which serves as a collaborative software development management system for Free Software projects. Savannah currently offers CVS, GNU arch, Subversion, Git, Mercurial, Bazaar, mailing list, web hosting, file...
- AliothAlioth (Debian)Alioth is a FusionForge system run by the Debian project for development of free software and free documentation,especially software or documentation to do with Debian....
by DebianDebianDebian is a computer operating system composed of software packages released as free and open source software primarily under the GNU General Public License along with other free software licenses. Debian GNU/Linux, which includes the GNU OS tools and Linux kernel, is a popular and influential... - BerliOSBerliOSBerliOS is a project founded by FOKUS, a Fraunhofer Institute located in Berlin, to coordinate the different interest groups in the field of open source software and to assume a neutral coordinator function...
- Kiln by Fog Creek SoftwareFog Creek SoftwareFog Creek Software is a software company specializing in project management tools. Its main products are FogBugz, a web-based project management tool, Fog Creek Copilot, a remote assistance tool, CityDesk, a desktop-based content management system, Kiln, a source control and code review tool built...
- Others listed in the Mercurial wiki
Projects using Mercurial
Some projects using the Mercurial distributed RCS:- AdiumAdiumAdium is a free and open source instant messaging client for Mac OS X that supports multiple IM networks, including Windows Live Messenger, Yahoo! Messenger, Google Talk, AIM, ICQ, and XMPP. It supports many protocols through the libraries libezv , MGTwitterEngine , and libpurple...
- AudaciousAudacious Media PlayerAudacious is a free software audio player with a focus on low resource usage, high audio quality, and support for a wide range of audio formats. It is designed primarily for use on POSIX-compatible systems such as Linux, with limited support for Microsoft Windows...
- Coin3DCoin3DCoin3D is an Open Inventor clone by the Norwegian company Kongsberg Oil & Gas Technologies . Coin3D, like Open Inventor, is a C++ object oriented retained mode 3D graphics API used to provide a higher layer of programming for OpenGL. The API provides a number of common graphics rendering constructs...
- CubicWebCubicWebCubicWeb is an open source semantic web application framework, licensed under the LGPL. It is written in Python.It has been an open free software project since October 2008, but the project began in 2000 and was initially developed by for internal uses such as intranet, bug tracker and forge...
- DovecotDovecot (software)Dovecot is an open source IMAP and POP3 server for Linux/UNIX-like systems, written primarily with security in mind. Developed by Timo Sirainen, Dovecot was first released in July 2002...
IMAP server - DreamwidthDreamwidthDreamwidth is an online journal service based on the LiveJournal code. It is a code fork of the original service, set up by ex-LiveJournal staff Denise Paolucci and Mark Smith, born out of a desire for a new community based on open access, transparency, freedom and respect.Dreamwidth was announced...
blogging platform - GeeXboXGeeXboXGeeXboX is a free Linux distribution providing a media center software suite for personal computers. GeeXboX 2.0 and later uses XBMC for media playback and is implemented as Live USB and Live CD options. As such, the system does not need to be permanently installed to a hard drive, as most modern...
- GNU Multi-Precision LibraryGNU Multi-Precision LibraryThe GNU Multiple Precision Arithmetic Library, also known as GMP, is a free library for arbitrary-precision arithmetic, operating on signed integers, rational numbers, and floating point numbers...
- GNU OctaveGNU OctaveGNU Octave is a high-level language, primarily intended for numerical computations. It provides a convenient command-line interface for solving linear and nonlinear problems numerically, and for performing other numerical experiments using a language that is mostly compatible with MATLAB...
- Go programming languageGo (programming language)Go is a compiled, garbage-collected, concurrent programming language developed by Google Inc.The initial design of Go was started in September 2007 by Robert Griesemer, Rob Pike, and Ken Thompson. Go was officially announced in November 2009. In May 2010, Rob Pike publicly stated that Go was being...
- Growl
- IllumosIllumosIllumos is a derivative of OS/Net , which basically is a Solaris/OpenSolaris kernel with the bulk of the drivers, core libraries, and basic utilities. It is dependent on OS/Net, which Illumos will follow very closely while allowing to retain changes to code which might be unacceptable to upstream...
- LEMONLEMON (C++ library)LEMON is an open source graph library written in the C++ language providing implementations of common data structures and algorithms with focus on combinatorial optimization tasks connected mainly with graphs and networks...
- LinuxTVLinuxTVThe LinuxTV project is an informal group of volunteers who develop software related to digital television for the Linux operating system. The community develops and maintains the DVB driver subsystem which is part of the Linux 2.6.x kernel...
/Video4LinuxVideo4LinuxVideo4Linux or V4L is a video capture application programming interface for Linux. Many USB webcams, TV tuners, and other devices are supported. Video4Linux is closely integrated with the Linux kernel. Video4Linux was named after Video for Windows , but is not technically related to it.- V4L2 :V4L2... - Lugaru HD
- LuxRenderLuxRenderLuxRender is an open source software rendering system for physically correct image synthesis. The program runs on Microsoft Windows, Mac OS X and Linux and exporters are available for Blender, SketchUp, Cinema 4D, XSI, DAZ Studio, and Maya.-Overview:...
3D Render Engine - Mercurial
- MoinMoinMoinMoinMoinMoin is a wiki engine implemented in Python, initially based on the PikiPiki wiki engine. The MoinMoin code is licensed under the GNU General Public License v2, or any later version .A number of organizations use MoinMoin to run public wikis,...
wiki software - MozillaMozillaMozilla is a term used in a number of ways in relation to the Mozilla.org project and the Mozilla Foundation, their defunct commercial predecessor Netscape Communications Corporation, and their related application software....
- Mutt
- NetbeansNetBeansNetBeans refers to both a platform framework for Java desktop applications, and an integrated development environment for developing with Java, JavaScript, PHP, Python, Groovy, C, C++, Scala, Clojure, and others...
- NuxeoNuxeoNuxeo delivers an open source document management application built with a complete, modular and extensible open source platform for enterprise content management. Other packaged applications built with the platform provide solutions for digital asset management and case management...
- Ogre3D
- OpenJDKOpenJDKOpenJDK is a free and open source implementation of the Java programming language. It is the result of an effort Sun Microsystems began in 2006...
- OpenIndianaOpenIndianaOpenIndiana is a Unix-like computer operating system released as free and open source software. It forked from OpenSolaris after the discontinuation of that project by Oracle and aims to continue development and distribution of the OpenSolaris codebase. The project operates under the umbrella of...
- OpenOffice.orgOpenOffice.orgOpenOffice.org, commonly known as OOo or OpenOffice, is an open-source application suite whose main components are for word processing, spreadsheets, presentations, graphics, and databases. OpenOffice is available for a number of different computer operating systems, is distributed as free software...
- OSSECOSSECOSSEC is a free, open source host-based intrusion detection system . It performs log analysis, integrity checking, Windows registry monitoring, rootkit detection, time-based alerting and active response. It provides intrusion detection for most operating systems, including Linux, OpenBSD, FreeBSD,...
- PETScPortable, Extensible Toolkit for Scientific ComputationThe Portable, Extensible Toolkit for Scientific Computation , is a suite of data structures and routines for the scalable solution of scientific applications modeled by partial differential equations. It employs the Message Passing Interface standard for all message-passing communication...
- Python (programming language)Python (programming language)Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability. Python claims to "[combine] remarkable power with very clear syntax", and its standard library is large and comprehensive...
- RabbitMQRabbitMQRabbitMQ is an open source message broker software , using the standard Advanced Message Queuing Protocol . The RabbitMQ server is written in Erlang and is built on the Open Telecom Platform framework for clustering and failover. Rabbit Technologies Ltd., acquired in April 2010 by VMware, develops...
- RawTherapee
- SageSAGE (Computer Algebra System)Sage is mathematical software with features covering many aspects of mathematics, including algebra, combinatorics, numerical mathematics, number theory, and calculus...
- Symbian OS
- Nokia MapsNokia MapsNokia Maps is a free mapping product and service by Nokia for its mobile phones and smartphone multimedia devices....
- TrytonTrytonTryton is a three-tier high-level general purpose computer application platform on top of which is built a business solution through a set of so-called Tryton modules....
- TuentiTuentiTuenti is a Spain-based, invitation-only private social networking website that has been referred to as the "Spanish Facebook." Tuenti, pronounced in Spanish, sounds like Twenty in English...
- VimVim (text editor)Vim is a text editor written by Bram Moolenaar and first released publicly in 1991. Based on the vi editor common to Unix-like systems, Vim is designed for use both from a command line interface and as a standalone application in a graphical user interface...
- W3C
See also
- Distributed revision controlDistributed revision controlA distributed revision control system , distributed version control or decentralized version control keeps track of software revisions and allows many developers to work on a given project without necessarily being connected to a common network.-Distributed vs...
- List of revision control software
- Comparison of revision control softwareComparison of revision control softwareThe following is a comparison of revision control software. The following tables includes general and technical information for notable revision control and software configuration management software.- General information :Table Explanation...
External links
- Unofficial Mercurial Home Page
- Mercurial: The Definitive Guide a book by Bryan O'Sullivan published in 2009 by O'Reilly and freely available online
- Mercurial: an alternative to git from LWN.net
- An example-based Mercurial tutorial covering both basic and advanced use
- Mercurial for TeamWare users
- Google TechTalk on Mercurial
- Subversion or CVS, Bazaar or Mercurial? Four open source version control systems compared
- HgEclipse is an open source plugin that supports Mercurial within the Eclipse IDEEclipse (software)Eclipse is a multi-language software development environment comprising an integrated development environment and an extensible plug-in system...
. - Joel Spolsky's Mercurial tutorial
- FLOSS Podcast featuring project lead Matt Mackall