在git中添加hg仓库

因为要改sdl的代码,又不想用hg,所以想找个类似remote svn一样的玩意儿。

放狗一搜结果发现还真有,作者felipec写了很详细的介绍:
http://felipec.wordpress.com/2012/11/13/git-remote-hg-bzr-2/

看起来是linux下的玩意儿,但作者没说在windows下怎么用。既然是个脚本,没理由不能在windows下跑。继续搜,找到了一个人在stack overflow上的发问,关于这玩意儿怎么安装的问题:

http://stackoverflow.com/questions/883452/git-interoperability-with-a-mercurial-repository

felipec很乐于推销自己的作品,此问题就是他回答的。可惜还是没说清楚怎么安装,所以评论里也有人喷他,’Simplicity. Ah… Magic!’

我只好先去他的github上看看代码:
https://github.com/felipec/git/blob/fc/master/contrib/remote-helpers/git-remote-hg.py

代码里似乎有windows的字样,也许最近更新过。好吧就假设windows可以直接用了,我下载了一份,把python27也装上,设置好PATH。

根据作者一贯的口气,只要把脚本也放到PATH中的路径下即可。我照做,然后执行:

git clone hg::http://<any-hg-url>

却报了个很奇怪的错:

fatal: git was built without support for
C:\Program (NO_PYTHON=YesPlease)

这个YesPlease的提示看起来很怨念的样子,我继续搜,果然也有人在问:
https://groups.google.com/forum/?fromgroups#!topic/msysgit/LpyViW97g0A

一看内容我就笑了,貌似是msysgit的人在喷这个felipec,说他不肯和msysgit合作。结果felipec跳出来反喷,说msysgit有意忽略他的作品。

总之他俩很欢乐的喷了半天,还是没说怎么安装……

我只好自力更生…… 先搜了一下文件名,在msysgit的安装目录git\libexec\git-core中居然发现了名为git-remote-hg的文件,内容就几行:

#!/bin/sh
echo >&2 "fatal: git was built without support for `basename $0` (NO_PYTHON=YesPlease)."
exit 128

我擦咧这不就是报错的地方么。我想了想,把git-remote-hg.py去掉扩展名,然后替换了这个文件。试了下git clone,这下有点进步了,脚本开始运行,报错说找不到mercurial模块。

好吧我确实忘记给python安装mercurial模块了。于是到hg的官网下载mercurial-2.6.tar.gz,然后尝试执行里面的setup.py:

python setup.py build

build居然报错:

error: Unable to find vcvarsall.bat

我一直以为mercurial是纯python的,原来还有c代码!可是我有装vs2012,vcvarsall.bat是用来配置vc编译环境的,按道理我是有的。

只好继续搜,翻过各种不靠谱的页面之后,找到了一篇详细的解释:
http://stackoverflow.com/questions/3047542/building-lxml-for-python-2-7-on-windows/5122521#5122521

简单的说就是python的windows版都是用vs2008编译的,所以它非要找vs2008的环境变量。如果换编译器来编译模块,可能工作不正常。

这个帖子建议是,去装个免费的vs2008 express吧!

看到这里我直接晕倒,开源社区的人对待windows用户真是不友好啊。何以解忧?唯有google!绕了一大圈后,我在mercurial官网看到了解决方案:
http://mercurial.selenic.com/wiki/WindowsInstall

原来只需要强制换用其他编译环境就好,譬如官网说可以用mingw来代替:

python setup.py build --force -c mingw32
python setup.py install --force --skip-build

嗯嗯,还是官网靠谱,于是乎mercurial的python package终于可以编译安装了。

接下来回到我的最初目的:

git clone hg::http://<any-hg-url>

顺利通过了!嗯嗯,终于可以开始干正事儿了……

One thought on “在git中添加hg仓库”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.