Versioning: Lossless Conversion from Hg to Git

January 11, 2011

I recently migrated from a private repository on Bitbucket to a public repository on Github. I didn’t want to lose my 168-commit history with the move, so naturally I started searching for ways to export my Mercurial history.

The ironically named Semi-useless rhetoric blog was one of the first hits.

The blog’s advice:

$ git clone git://
$ mkdir new_git_repo
$ cd new_git_repo
$ git init
$ /path/to/ -r /path/to/hg_repo
$ git checkout HEAD`

I ran into trouble with the hg-fast-export line. My terminal issued the following:

File "/DIRECTORY_I_CLONED_TO/fast-export/", line 6, in     from mercurial import repo,hg,cmdutil,util,ui,revlog,nodeImportError: No module named mercurial

That was nonsense. I suspected I had multiple versions of python installed. Good news! The python_select tool makes it easy to choose a default installation of python. So let’s install it:

$ sudo port install python_select
$ sudo python_select -s`
  --> python26-apple*
$ sudo python_select -l`
  --> current none python26 python26-apple*
$ sudo python_select python26`

We can verify this version of Python actually has our module in it

$ python
>>> help('modules')

Now we’re all set for hg-fast-export.

Note My system is Mac OS X 10.6 with Mercurial installed from MacPorts.

Profile picture

Written by @sghill, who works on build, automated change, and continuous integration systems.