title: Importing a Mercurial repository
intro: >-
You can import a repository from Mercurial by converting the repository to
Git, then pushing the Git repository to {% data variables.product.github %}.
versions:
fpt: '*'
ghes: '*'
ghec: '*'
shortTitle: Mercurial
Prerequisites
To follow these steps, you must use a macOS or Linux system and have the following tools installed:
- Mercurial
- Git
- {% data variables.large_files.product_name_long %} ({% data variables.large_files.product_name_short %}) (see AUTOTITLE)
- Python, including the
pippackage manager
Importing a Mercurial repository
{% data reusables.migrations.create-empty-repo %}
To confirm that Mercurial is installed on your machine, run
hg --version.The output should be similar to
Mercurial Distributed SCM (version 6.4).
{% data reusables.migrations.confirm-git-installed %} {% data reusables.migrations.confirm-git-lfs-installed %}
To confirm that
pipis installed on your machine, runpip --version.The output should be similar to
pip 21.2.4.To install the
mercurialPython package, runpip install mercurial.Download the latest release of fast-export to your machine, then extract the archive.
Move into the extracted directory, then run
./hg-fast-export.sh --help.The output should start with
usage: hg-fast-export.sh.Clone your Mercurial repository.
For example, to clone the source code of Mercurial itself to the
mercurial-repodirectory, runhg clone https://www.mercurial-scm.org/repo/hg mercurial-repo.Create a new directory, move into the new directory, then initialize a fresh Git repository.
For example, if you want to name your new repository
mercurial-git, runmkdir mercurial-git && cd mercurial-git && git init.
{% data reusables.migrations.move-into-git-repo-directory %}
To configure your new Git repository to handle the case of filenames in the same way as Mercurial, run
git config core.ignoreCase false.To get a list of committers in your Mercurial project and store the list in
committers.txt, run the following script.hg log --template "{author}\n" | sort | uniq > committers.txtUpdate your
committers.txtfile, mapping the committer name used in the Mercurial repository to the name you want to use in your Git repository, with the following format:“The Octocat <octocato@gmail.com>”=”Octocat <octocat@github.com>”In your initialized Git repository, run
hg-fast-export.sh, passing in the path to your Mercurial repository and the path to yourcommitters.txtfile as arguments.For example,
../fast-export-221024/hg-fast-export.sh -r ../mercurial-repo -A ../mercurial-repo/committers.txt -M main.After the import finishes, to check out your newly-created Git repository, run
git checkout HEAD. {% data reusables.migrations.add-github-repo-as-remote %} {% data reusables.migrations.push-to-github %}
{% ifversion fpt or ghec %}
Further reading
- AUTOTITLE {% endif %}