如何在Windows上正确安装dulwich以使hg-git工作?

60 投票
11 回答
16125 浏览
提问于 2025-04-15 19:54

我在Windows上尝试使用hg-git这个Mercurial扩展(具体来说是Windows 7 64位)。我已经安装了Mercurial和Git,还有Python 2.5(32位)。

我按照http://hg-git.github.com/上的说明来安装这个扩展。最开始用easy_install安装失败了,因为它无法在没有Visual Studio 2003的情况下编译dulwich。

我手动安装了dulwich,步骤如下:

  • git clone git://git.samba.org/jelmer/dulwich.git
  • cd dulwich
  • c:\Python25\python setup.py --pure install

现在当我运行easy_install hg-git时,它成功了(因为dulwich的依赖关系已经满足)。

在我的C:\Users\username\Mercurial.ini文件中,我有:

[extensions]
hgext.bookmarks =
hggit =

当我在命令提示符下输入'hg'时,我看到:

"*** failed to import extension hggit: No module named hggit"

在我的c:\Python25文件夹下,我看到关于hggit的唯一引用是Lib\site-packages\hg_git-0.2.1-py2.5.egg。这个文件应该被解压到某个地方,还是可以直接使用?

由于这个失败,我尝试了hg-git页面上“更复杂”的说明,建议我克隆git://github.com/schacon/hg-git.git并在我的Mercurial配置中引用这个路径。我克隆了这个仓库,并把我的扩展文件改成了:

[extensions]
hgext.bookmarks =
hggit = c:\code\hg-git\hggit

现在当我运行hg时,我看到:*** failed to import extension hggit from c:\code\hg-git\hggit: No module named dulwich.errors。

好吧,这告诉我它现在找到了hggit,因为我可以在hg-git\hggit\git_handler.py中看到它调用了

from dulwich.errors import HangupException

这让我觉得dulwich没有正确安装,或者没有在路径中。

更新:

从Python命令行:

import dulwich

返回Import Error: No module named dulwich

不过,在C:\Python25\Lib\site-packages下,我确实有一个dulwich-0.5.0-py2.5.egg文件夹,看起来里面有东西。这是通过上面提到的步骤创建的。我还需要做什么额外的步骤来让它成为Python的“路径”的一部分吗?

从Python命令行(根据其中一个答案的建议):

import pkg_resources
pkg_resources.require('dulwich')

返回[dulwich 0.5.0 (c:\python25\lib\site-packages\dulwich-0.5.0-py2.5.egg)]

那么这告诉我什么呢?导入dulwich失败了,但显然pkg_resources可以找到它。我可以用这些信息做些什么呢?

11 个回答

8

如果你能安装TortoiseHg,它里面已经包含了dulwich和其他需要的东西。

12

我在这个网站上找到了一个更简单的解决方案:http://candidcode.com/2010/01/12/a-guide-to-converting-from-mercurial-hg-to-git-on-a-windows-client/

然后我自己又找到了一个更简单的方法:

在Windows上使用hg-git这个Mercurial扩展:

  1. 安装官方的Mercurial软件包
  2. 把来自dulwich源代码的dulwich文件夹和来自hg-git源代码的hggit文件夹放到Mercurial安装文件夹中的library.zip的根目录下
  3. 在%USERPROFILE%\Mercurial.ini文件中添加以下内容:

[extensions]
hgext.bookmarks=
hggit=

如果想要支持SSH,你需要从PuTTY工具包中获取plink.exe。之后,你还需要在Mercurial.ini中添加以下内容:

[ui]
username = John Doe <foo@example.com>
ssh=d:/home/lib/dll/plink.exe -i "d:/home2/ssh-private-key.ppk"

第一次连接SSH服务器时,你需要启动putty.exe并尝试连接。这样会把服务器的密钥指纹添加到注册表中。否则,plink会要求你接受这个指纹,但它不会接受任何输入。

你可以使用puttygen.exe来生成私钥。可以选择不带密码的密钥,或者使用Pageant.exe这个SSH认证代理。

16

这让我觉得 dulwich 可能没有正确安装,或者没有在路径中。

你说得对。Windows 上的 Mercurial 二进制版本是“冻结”的——它们使用的是自带的 Python 代码和解释器,因此和系统中的 PYTHONPATH 里安装的包没有关系。当你在 Mercurial.ini 文件中指定 hggit 扩展的路径时,hg 会尝试直接用这个路径来导入它,但 dulwich 库并不是 hg 明确导入的,也没有和它的库一起打包,所以导入失败了。

可以把 Dulwich 和 HgGit 都放进和 hg.exe 一起安装的 library.zip 里,但对我来说,最好的办法是从源代码安装所有东西,包括 Mercurial,然后使用安装在 \Python\Scripts 里的 .bat 文件来执行命令。在这种情况下,你需要:

  1. 从源代码安装 Mercurial。这样会构建一个“纯”版本,因为 Windows 用户通常没有 Visual Studio 或其他编译器来编译 C 语言的加速代码。
  2. 安装 Dulwich - 我会使用最新的主干 快照,适用于 Git 和 Dulwich。

    运行命令:python setup.py --pure install

  3. 安装最新的 HgGit 快照

    运行命令:python setup.py install

  4. 编辑 Mercurial.ini 文件以启用 hggit =

  5. 通过你的 \Python\Scripts\hg.bat 启动 Mercurial

撰写回答