After going through the pain of (re-)discovering how to convert a Mercurial repository into a Git repository on Windows, I thought I’d share how easy it really is. I’ve bounced back and forth between Mercurial and Git a few times – my current preference is Git, mainly because I like Git’s branching strategy a bit better – but really, they’re both excellent choices. I still find the best analogy for comparing them is that Git is MacGyver and Mercurial is James Bond.
As I already mentioned, this guide expects that you have TortoiseHg installed on your system.
For the actual conversion, we’re going to be using a Mercurial extension called hggit that enables Mercurial to push and pull from Git repositories. You can either clone the hggit repository on GitHub or grab a zipped version here.
What we need is the hggit folder from the clone or zip file – put this some place handy and remember the path.
Preparing the Git repository
In this guide we’re going to be pushing our repository to a local Git repository – so let’s create a bare repository – this way you’ll avoid Git complains about pushing to a non-bare repository.
Open a command prompt, create a directory for the new repository and from within the directory execute:
git init –bare
Enabling hggit in Mercurial
Now we need to let Mercurial know about the hggit extension. This is done by adding it to the .hgrc or mercurial.ini file in your home directory (for me that’d be c:\users\rasmuskl\mercurial.ini).
In the config file, find the [extensions] section – or add it at bottom if it’s not already there. Then add a reference to the hggit extension followed by the path of the hggit folder:
hggit = c:\path\to\hggit
Converting the repository
To convert the repository, simply open your command prompt, navigate to your Mercurial repository and do:
hg push c:\path\to\bare\git\repository
And you’re done. You can now either clone the bare repository to a working directory – or push it to your GitHub or Bitbucket account.