Using git-remote-hg on windows

This doesn’t seem to work all that smooth on Windows tough.

I tried to follow this guide

After fixing the makeFile to work on my system and building git i couldn’t call git-remote-hg because it complained it couldn’t find the python interpreter, all tough it’s configured correctly.
So i manually called it with

C:/Python27/python.exe git-remote-hg clone C:/TestMercurialRepo

This is now giving me the following error.

Traceback (most recent call last):
  File "git-remote-hg", line 99, in <module>
  File "d:\development\msysgit\git\git_remote_helpers\", line 196, in m
    repo = self.get_repo(alias, url)
  File "git-remote-hg", line 33, in get_repo
    if repo.capable('branchmap'):
  File "c:\Python27\lib\site-packages\mercurial\", line 205, in __get
    return getattr(self._unfilteredrepo, attr)
AttributeError: 'mqrepo' object has no attribute 'capable'

How can i fix this ?
If there is a pre build version anywhere then that would be super awesome because i feel like i’m doing way to much to get this to work.

Best answer

I got this to work today on Windows. Basically, since the msysgit distributions have no Python support, I took Felipe’s file and used py2exe to package it up as an executable. Afterwards, I put all of the py2exe output into the ‘libexec’ folder under my Git installation directory, and it works.

For it to work, you need:

  1. Python 2.7
  2. The Mercurial Python module (windows installers here)
  3. py2exe (windows installers here)
  4. Felipe’s git-remote-hg python script (save raw to file here)

Create a file named that contains:

from distutils.core import setup
import py2exe


Save the file to your file system and run the following command:

python py2exe --include mercurial    

py2exe will produce a folder called ‘dist’ that contains the output. Copy the contents of that folder into the libexec\git-core folder under your main Git installation folder (e.g., C:\Program Files(x86)\Git).

Now, you should be able to clone from a Mercurial repo using the Git client.

(Note: I wrote these steps in a bit of a hurry, so please post back if I’ve left out anything).