Converting Mercurial folder to a Git repository
On Linux or anything with bash/sh
or similar, or python
, try with fast export:
cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD
Windows: TortoiseHG Hg-Git extension
Hg-Git can be used to convert a Mercurial repository to Git. You can use a local repository or a remote repository accessed via SSH, HTTP or HTTPS.
Example of local repositories conversion.
-
Install Hg-Git.
-
On Windows, TortoiseHg comes with Hg-Git, though you need to enable it via the setting tool (in extensions section)
or manually in
~/mercurial.ini
[extensions] hggit =
-
-
Use the following commands to convert the repository:
$ mkdir git-repo; cd git-repo; git init; cd .. $ cd hg-repo $ hg bookmarks hg $ hg push ../git-repo
The hg
bookmark is necessary to prevent problems as otherwise hg-git pushes to the currently checked out branch confusing Git. This will create a branch named hg
in the Git repository. To get the changes in master use the following commands (only necessary in the first run, later just use git merge
or rebase
):
$ cd git-repo
$ git checkout -b master hg
You can (from Mercurial side):
- using Convert extension with
--filemap
option convert part of original repo into smaller with only needed files|directories - with hg-git extension push stripped repo to Git
or (instead of hg-git), using Mercurial bridge in Git, clone|pull repository from Git
Gitify
Seems as a more modern and easy to use alternative to perform the conversion https://github.com/buchuki/gitifyhg
pip install gitifyhg
git clone gitifyhg::<hgrepoaddress>
# done, you have a git repo with the entire history of the hg one
Convert a Mercurial repository to Git on Windows 10
If no problem with encoding - use TortoiseHG Hg-Git extension
md new-repo && cd new-repo
git init --bare .git
cd ..\old-mercurial-repo
hg bookmark -r default master
hg push ..\new-repo
cd ..\new-repo
git config --bool core.bare false
If something wrong with encoding - use fast-export
Install Bash
Open PowerShell as Administrator and run:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Install Ubuntu 16.04 LTS from Microsoft Store
Open Bash and run
install mercurial
sudo -s
apt-get update
apt install mercurial
get fast-export v180317 (at the moment versions after 180317 does not work correctly)
cd /mnt/c/path_to_work_folder
git clone https://github.com/frej/fast-export.git
cd fast-export
git checkout tags/v180317
cd ..
convert repository
git init new-repo && cd new-repo
git config core.ignoreCase false && git config core.quotepath off
../fast-export/hg-fast-export.sh -r ../path_to_mercurial_repo/ --fe cp1251
git checkout master
encoding options:
-
-f
encoding, like-f cp1251
-
--fe
file name encoding like--fe cp1251