0

我们使用 mercural-server 作为服务器上的中央存储库,Windows 开发人员使用 TortoiseHg 作为客户端。其中一位开发人员甚至无法克隆存储库——hg 以“abort:”响应,没有任何消息。

SSH 授权成功通过——在其他计算机上使用相同的密钥是可以的,我可以克隆存储库并在其中进行更改。

如果我在该开发人员的计算机上运行 hg --traceback clone <...> 我得到:

Traceback (most recent call last):
File "mercurial\dispatch.pyo", line 88, in _runcatch
File "mercurial\dispatch.pyo", line 743, in _dispatch
File "mercurial\dispatch.pyo", line 514, in runcommand
File "mercurial\dispatch.pyo", line 833, in _runcommand
File "mercurial\dispatch.pyo", line 804, in checkargs
File "mercurial\dispatch.pyo", line 740, in <lambda>
File "mercurial\util.pyo", line 475, in check
File "mercurial\commands.pyo", line 1234, in clone
File "mercurial\hg.pyo", line 267, in clone
File "mercurial\hg.pyo", line 121, in peer
File "mercurial\hg.pyo", line 101, in _peerorrepo
File "mercurial\sshpeer.pyo", line 59, in __init__
File "mercurial\sshpeer.pyo", line 73, in validate_repo
File "mercurial\util.pyo", line 137, in popen3
File "subprocess.pyo", line 679, in __init__
File "subprocess.pyo", line 896, in _execute_child
WindowsError: [Error 2]
abort: 

目标文件夹是可写的。我什至不知道问题的根源是什么,因为在其他 Windows 计算机上使用相同版本的 TortoiseHg(TortoiseHg 2.7.1(使用 Mercurial 2.5.2))并且使用相同的存储库可以正常工作。

4

1 回答 1

1

在这种情况下,你应该去源头 - hg clone https://www.mercurial-scm.org/repo/hg。查看 sshpeer.py 第 73 行及其周围的上下文,似乎在尝试执行 ssh 调用时发生了错误。

最可能的原因是:

  1. 开发人员在某处的 hgrc 中有一个混乱的ui.ssh条目。可能他们已经指定如下:

    [ui]
    ssh = "ssh -C"
    

    代替:

    [ui]
    ssh = ssh -C
    
  2. 开发人员可能已经指定了一个ui.ssh没有可用的适当 ssh 二进制文件的部分。默认情况下,TortoiseHg 将使用 PuTTY(它会安装二进制文件),但如果您说要使用其他东西,Mercurial 会服从。

如果检查以上没有帮助,克隆 mercurial 源,修改它以显示 ssh 命令(sshpeer ~line 73)并以纯模式安装它,然后尝试克隆。这将准确地告诉您正在调用什么。

hg clone https://www.mercurial-scm.org/repo/hg
cd hg
<path\to\python>\python setup.py --pure install
cd <other directory>
<path\to\python>\Scripts\hg.bat clone <repo>

另外,请在适当的错误跟踪器上提出错误报告。

于 2013-04-06T21:10:50.143 回答