59

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

我按照http://hg-git.github.com/上的说明安装了扩展。最初的 easy_install 失败是因为没有 Visual Studio 2003 就无法编译 dulwich。

我通过以下方式手动安装了德威:

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

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

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

[extensions]
hgext.bookmarks =
hggit =

当我在命令提示符下键入“hg”时,我看到:“*** 无法导入扩展 hggit:没有名为 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 配置中引用路径。我克隆了 repo,并将扩展文件更改为:

[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

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

更新:

从 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 可以找到它。我能用这些信息做什么?

4

11 回答 11

16

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

你是绝对正确的。Windows 的 Mercurial 二进制发行版是“冻结的”——它们使用与它们捆绑在一起的 Python 代码和解释器,因此独立于系统 PYTHONPATH 中安装的软件包。当您在 Mercurial.ini 中指定 hggit 扩展的路径时,hg 会尝试使用直接路径导入它,但 dulwich 库不是由 hg 显式导入的,也没有与它的库捆绑,因此导入失败。

可以将 Dulwich 和 HgGit 添加到与 hg.exe 一起安装的 library.zip 中,但对我来说,最好的方法是从源代码安装所有内容,包括 Mercurial,并使用安装到 \Python\Scripts 中的 .bat 文件执行命令。在这种情况下,您需要:

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

    python setup.py --pure install

  3. 安装最新的 HgGit快照

    python setup.py 安装

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

  5. 使用您的 \Python\Scripts\hg.bat 启动 Mercurial
于 2010-04-28T22:25:07.707 回答
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 身份验证代理。

于 2011-08-09T15:28:17.823 回答
8

如果可以安装 TortoiseHg,它包括德威和其他要求。

于 2010-04-02T03:57:15.657 回答
4

尝试以下配置(更改您的路径),这对我有用:

[extensions]
; hg-git extention
hgext.bookmarks =
hggit = C:\Python26\Lib\site-packages\hg_git-0.2.1-py2.6.egg\hggit

在我的情况下,当我有空值时hggit =,我会得到与在这种情况下相同的错误。但是我可以import dulwich在 python shell 中没有问题,所以你应该检查你的easy-install.pth(正如大卫所指出的)它是否包含dulwich-0.5.0-py2.5.egg. 我也安装了纯版本dulwich

于 2010-03-23T22:37:50.837 回答
1

即使在下载了最新的 Tortoisehg 并确保安装了 hggit 插件以及我的 .ini 和 hgrc 文件具有启用 hggit 的正确条目之后,我也遇到了这个错误。

原来我的问题是我的路上同时有 mercurial 和 tortoisehg。因此,当我运行任何 hg 命令时,它使用的是 mercurial 文件夹中的 hg.exe,而不是 torsoisehg 目录中的 hg.exe。

这是有道理的,但我的 mercurial 安装没有插件。我的解决方法是从我的路径中删除 mercurial,以便 hg 命令通过 tortoisehg 目录,因为它已经完全捆绑了 hg。但是请注意,推荐的选项可能是将 mercurual 升级到具有所需插件的版本,但这对我有用。我尝试将 mercurial 中的 library.zip 替换为 tortoisehg 中的 library.zip,这很有效,但它会导致其他错误,正如人们想象的那样。

@techtonik 的回答使我走上了这条我很感激的道路。

回顾:通过检查您的路径来验证哪个 hg exe 正在运行您的 hg 命令,因为无论出于何种原因,该 hg.exe 都找不到插件。

于 2016-02-01T20:21:20.483 回答
1

今天安装最新的 TortoiseHg 时遇到了这个问题。

在您的系统上获取最新的 python 2.7(我使用的是 2.7.16)设置,您可能已经有了它。获取命令窗口并转到 c:\Python27 文件夹 运行 pip 使用 Scripts\pip 或 easy_install 使用 Scripts\easy_install 尝试 pip -V 以确保获得 2.7 版本而不是某些 3.X 版本

错误的:

c:\Python27>pip -V
pip 20.2.4 from c:\python38\lib\site-packages\pip (python 3.8)

对:

c:\Python27>Scripts\pip -V
pip 20.2.4 from c:\python27\lib\site-packages\pip (python 2.7)

如果已经安装了 dulwich 或 hg-git

Scripts\pip uninstall dulwich
Scripts\pip uninstall hg-git

安装 hg-git

Scripts\easy_install install hg-git

您现在应该有两个文件夹

C:\Python27\Lib\site-packages\dulwich-0.19.16-py2.7-win-amd64.egg\dulwich
C:\Python27\Lib\site-packages\hg_git-0.9.0-py2.7.egg\hggit

仅当 Dulwich 版本为 0.19.16(小于 0.20.x)时才有效

将这些文件夹(dulwich 和 hggit)复制到压缩文件 C:\Program Files\TortoiseHg\lib\library.zip

zip 文件中的文件夹

于 2020-11-29T12:21:13.883 回答
0

直到你开始import dulwich工作,hggit不会工作。检查dulwichegg 文件是否在您easy-install.pthsite-packages.

为了进一步调试,您可以尝试询问pkg_resources它:

import pkg_resources
pkg_resources.require("dulwich")
于 2010-03-12T11:48:40.497 回答
0

dulwich.errors 我也遇到了这个问题。而不是从头开始安装所有东西。我刚刚将 dulwich 从我的默认站点包复制到了 mercurial 站点包。工作没有问题。

于 2010-11-22T05:12:16.780 回答
0

根据 techtonik对导入失败原因的解释dulwich.errors,我找到了一个对我来说似乎比已经提出的解决方案更简单的解决方案:

Mercurial 下载页面上提供

Windows x86 上 Python 2.7 的Mercurial <x.y.z>(源安装)

Windows x64 上 Python 2.7 的Mercurial <x.y.z>(源安装)

作为 .EXE 文件,将 Mercurial 作为 Python 模块安装到现有的 Python 2.7(x86 或 x64)安装中。

如果 hg-git 和 dulwich 也已安装到此 Python 安装中,则导入错误应该会消失。

如果您不确定现在该做什么,我希望这个分步说明对您有所帮助:

先决条件

脚步

  1. 卸载任何现有的 Mercurial 安装
  2. 下载并安装上面引用的 EXE 文件之一,具体取决于您的 Python 2.7 安装是 32 位还是 64 位(如果您收到“无法在注册表中找到 Python 2.7”错误,您可能需要另一个。)

现在hg clone <some git repo>应该在控制台上工作。

于 2014-01-22T01:43:24.930 回答
0

经过长时间的研究,我终于设法正确设置了 hggit。
我做了什么:

  1. 我已经安装了最新版本的 TortoiseHg(在我的情况下是5.9.1 版
    这个官方版本(自动)包含Python-2.7.18(根据帮助/关于)
  2. 下载德威:cd C:\dulwich,git clone https://github.com/dulwich/dulwich.git .
  3. TortoiseHg 使用 Python 2.7,dulwich 不再支持这个(旧)Python 版本。我们必须回到旧版本的德威(<0.20)
    git reset --hard c6993451a745d313f61e5d080b9f9d8611a8d7f4
  4. 必须将子文件夹C:\dulwich\dulwich复制到 zip 文件
    C:\Program Files\TortoiseHg\lib\library.zip中,以便有路径
    C:\Program Files\TortoiseHg\lib\library.zip\dulwich
    这可以通过以下命令完成:
    a) 提取 TortoiseHg 库的当前内容
    md "C:\Program Files\TortoiseHg\lib\ExtractedLibrary"
    tar -xf "C:\Program Files\TortoiseHg\lib\library.zip" -C "C:\Program Files\TortoiseHg\lib\ExtractedLibrary"
    b) 将 dulwich 文件复制到目录
    xcopy C:\dulwich\dulwich "C:\Program Files\TortoiseHg\lib\ExtractedLibrary\dulwich\"
    c) 保存旧 library.zip 并创建新 library.zip
    ren "C:\Program Files\TortoiseHg\lib\library.zip" library_old.zip
    cd "C:\Program Files\TortoiseHg\lib\ExtractedLibrary"
    tar -acf "C:\Program Files\TortoiseHg\lib\library.zip" *.*
    d) 清理
    cd ..
    rd /q /s "C:\Program Files\TortoiseHg\lib\ExtractedLibrary"
    rd /q /s C:\dulwich
  5. 下载 hg-git: cd C:\hg-git,hg clone https://foss.heptapod.net/mercurial/hg-git .
  6. 当前版本的 hg-git 也不再支持 Python 2.7。我们必须回到上一个工作版本 0.9.0(= TortoiseHg 中的修订版 1320):
    hg update 6d7d6f174df8
  7. 创建一个新的空存储库,它将“连接”到远程 git 存储库
    cd C:\MyLocalHgRepoWhichIsConnectedToGithg init
  8. 创建一个C:\MyLocalHgRepoWhichIsConnectedToGit\.hg\hgrc包含以下内容的文本文件:
[paths]
default = C:\ConnectedGitRepoForPushAndPull

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

备注:或者您也可以将文件夹 C:\hg-git\hggit 复制到 library.zip 中,并将 hgrc 文件中的路径留空。的确,这是我最喜欢的方式。按照我在第 4 步中用德威解释的方法进行操作。

就是这样。现在 Mercurial Repo 已链接到 Git Repo
,您​​可以执行 hg pullhg push在 Hg Repo 中执行。



如果你不想阅读我所有的解释,你可以简单地使用这个批处理文件并执行它:

hggit.bat

@echo off
rem Installation von dulwich+hggit für TortoiseHg
rem Michael Hutter, 22.09.2021
rem https://stackoverflow.com/a/69279657/9134997

if "%1"=="install" goto install
if "%1"=="clonegitrepo" goto clonegitrepo
echo Syntax:
echo %0 install (installiert dulwich und hggit in TortoiseHg)
echo %0 clonegitrepo C:\HgRepoToCreate C:\GitRepoToClone (Klonen eines Git-Repos in ein Hg-Repo)
pause
goto ende


:install
set LibraryPath=C:\Program Files\TortoiseHg\lib
set TempPathDulwich=C:\Temp\dulwich
set TempPathHggit=C:\Temp\hg-git

if not exist "%LibraryPath%\library.zip" (
echo Die Datei %LibraryPath%\library.zip existiert nicht!
pause
goto Ende
)

rem Installation von dulwich
md %TempPathDulwich%
cd %TempPathDulwich%
git clone https://github.com/dulwich/dulwich.git .
git reset --hard c6993451a745d313f61e5d080b9f9d8611a8d7f4
pause

rem Installation von hg-git
md %TempPathHggit%
cd %TempPathHggit%
hg clone https://foss.heptapod.net/mercurial/hg-git .
hg update 6d7d6f174df8
pause

rem dulwich und hggit in library.zip aufnehmen
md "%LibraryPath%\ExtractedLibrary"
tar -xf "%LibraryPath%\library.zip" -C "%LibraryPath%\ExtractedLibrary"
xcopy %TempPathDulwich%\dulwich "%LibraryPath%\ExtractedLibrary\dulwich\"
xcopy %TempPathHggit%\hggit "%LibraryPath%\ExtractedLibrary\hggit\"
ren "%LibraryPath%\library.zip" library_old.zip
if exist "%LibraryPath%\library.zip" del "%LibraryPath%\library.zip"
cd "%LibraryPath%\ExtractedLibrary"
tar -acf "%LibraryPath%\library.zip" *.*

rem Aufräumen
cd ..
rd /q /s "%LibraryPath%\ExtractedLibrary"
rd /q /s %TempPathDulwich%
rd /q /s %TempPathHggit%
pause
goto ende


:clonegitrepo
rem Klonen eines Git-Repos in ein lokales Hg-Repo
echo Erstelle neues HgRepo %2
md %2
cd %2
if not exist %2 (
echo "Fehler: %2 existiert nicht!"
pause
goto ende
)
hg init
echo [paths] > .hg\hgrc
echo default = %3 >> .hg\hgrc
echo. >> .hg\hgrc
echo [extensions] >> .hg\hgrc
echo hgext.bookmarks = >> .hg\hgrc
echo hggit = >> .hg\hgrc
hg pull
hg update
pause

:ende
于 2021-09-22T07:07:44.920 回答
-2

sudo apt-get install python-dev # Dam 你的依赖!

sudo easy_install 德威

成功!

于 2013-08-14T19:06:34.667 回答