Install and setup Mercurial#

In this page, we discuss how to install and setup modern Mercurial using the topic, evolve and hg-git extensions. General Mercurial installation instructions are given here https://www.mercurial-scm.org/install, however, unless you really know what you’re doing, I strongly suggest that you just follow the following instructions.

Important

It is really easy with other installation methods to get a broken installation without the topic, evolve and hg-git extensions and you need them to contribute to projects using modern Mercurial and to projects hosted on Github and Gitlab instances.

Installing with tools like conda or pip is possible but really not a good idea for Mercurial. Unless you really know what you do, it’s very easy to obtain a broken installation with apt or similar package management tools.

You can check your installation by running hg help topic, which has to print the help for the topic command.

Since Mercurial is a Python application, recent versions can be installed with tools like UV, Pipx or Pixi. However, for Windows it is still better to just install TortoiseHG as presented below.

Warning

These instructions suppose that you have UV (see https://docs.astral.sh/uv/#installation) or Pipx installed. If these tools do not work correctly, see Install and setup useful applications with pipx.

1. Preliminary: visual diff and merge tools#

If you don’t use TortoiseHG, you should really install a visual diff and merge tool, for example Meld.

Download and execute the installer here: https://meldmerge.org/

Install meld with:

brew install --cask meld
sudo apt install meld

2. Install Mercurial and its extensions#

Note

On Linux and macOS, if you don’t have any preference, you should use UV.

TortoiseHg, Mercurial and few important extensions can be installed with Winget:

winget install TortoiseHg.TortoiseHg -e --accept-package-agreements

Alternatively, one can download an installer and run it to install TortoiseHG.

uv tool install mercurial --with hg-git,hg-evolve

On macOS, it can be useful to also add --with certifi

pipx install mercurial
pipx inject mercurial hg-git hg-evolve

Potentially useful to fix ssl issues (macOS)

pipx inject mercurial certifi
pixi global install mercurial --with hg-git --with hg-evolve

On macOS, it can be useful to also add --with certifi

3. Check that hg corresponds to the Mercurial installed with UV/Pipx/Pixi#

The recent and good Mercurial that you just installed with the previous step can be hidden by another Mercurial. This is a current cause of issue. Let’s check that by running:

hg debuginstall -T "{pythonexe}\n"
Not using the right hg?

The simplest solution is to uninstall the old Mercurial installed with another method.

Alternatively, the directory where UV/Pipx/Pixi puts the executables has to be before other directories where older Mercurial can be present so that hg really corresponds to the Mercurial install with UV/Pipx/Pixi. You can check the environment variable $PATH. See Install and setup useful applications with pipx.

4. Setup Mercurial (config file ~/.hgrc and completion)#

You need a file ~/.hgrc containing something like this file. A decent Mercurial configuration file can be created with hg config --edit. Alternatively (recommended for beginners), one can use hg-setup to create the user configuration file and initialize shell completion:

uvx hg-setup init

or (if you get an error)

uv tool install hg-setup
hg-setup init
pipx run hg-setup init

Complete information, save the config file and quit hg-setup

5. Check that everything is fine. Are evolve, topic and hggit extensions indeed enabled?#

hg version -v

Important

If evolve, topic and hggit are not mentioned in the output of hg version -v, there is a problem that needs to be fixed.

If everything is fine, you should be able to get some help provided by the extensions. Check it (press on q to quit the help screen)!

hg help evolve
hg help topic
hg help hggit

When everything is fine, you should be able to clone Mercurial repos with something like

hg clone https://foss.heptapod.net/fluiddyn/fluidhowto

You should also be able to clone Git repos with something like:

hg clone https://github.com/paugier/nbabel.git

or, alternatively and better, but you need to setup a SSH key on Github (take time to do this since it is really useful!):

hg clone git@github.com:paugier/nbabel.git

Note

It is fine to use the same SSH key for other applications, for example Gitlab or Heptapod instances. You only share the public key.