在Windows上的ssh客户端和服务器上的Mercurial

时间:2009-11-11 14:53:11

标签: windows mercurial

我正在尝试将Mercurial配置为与Windows服务器(freeSSHd)和客户端(包括命令行和TortoiseHG)一起使用。我正在使用所有内容的最新版本......所有这些都是在过去几天内下载的。使用公钥验证,我已经能够连接到服务器,我能够使用plink执行“hg版本”并获得响应,但是当我尝试从ssh服务器克隆存储库时,命令似乎挂。使用-v运行产生:

hg -v clone ssh://<username>@<server>//hg/repositoryA testRepositoryA
running "plink.exe -i "<path to private key file>" <username>@<server> "hg -R /hg/repositoryA serve --stdio""

没有更多的即将到来。直接在服务器上运行hg serve命令会产生一个明显响应的Mercurial服务器,但客户端似乎没有进一步的请求。

在存储库目录中运行“hg serve”并通过http克隆工作完美。

我应该寻求什么来帮助调试?是否有客户端(hg和TortoiseHG)没有发送以继续请求流?

其他信息: 如果我更改为目标计算机上的无效存储库,则会显示相应的错误,因此看起来远程hg正在运行并正确评估路径。

使用--debug和--traceback运行会导致:

sending hello command
sending between command

它挂起来,直到我CTRL-C

Traceback (most recent call last):
  File "mercurial\dispatch.pyo", line 46, in _runcatch
  File "mercurial\dispatch.pyo", line 452, in _dispatch
  File "mercurial\dispatch.pyo", line 320, in runcommand
  File "mercurial\dispatch.pyo", line 504, in _runcommand
  File "mercurial\dispatch.pyo", line 457, in checkargs
  File "mercurial\dispatch.pyo", line 451, in <lambda>
  File "mercurial\util.pyo", line 402, in check
  File "mercurial\commands.pyo", line 636, in clone
  File "mercurial\hg.pyo", line 187, in clone
  File "mercurial\hg.pyo", line 63, in repository
  File "mercurial\sshrepo.pyo", line 51, in __init__
  File "mercurial\sshrepo.pyo", line 73, in validate_repo
KeyboardInterrupt
interrupted!

回应Ryan:服务器上似乎没有任何CPU使用或增加内存使用量。它似乎在等待客户端发送请求或类似的东西。

2009年11月19日:更多信息: 问题肯定在等式的freeSSHd /服务器端。使用相同的键集通过ssh连接到bitbucket工作正常。仍在努力。

6 个答案:

答案 0 :(得分:3)

对我有用的解决方案是禁用SSH选项卡内的“使用新控制台引擎”选项。另一件事是路径。 SSH:// ssh_user @ SSH_Server_Address:SSH_Port / Win_Drive_Letter:/ Path_To_HG_Repository

一个具体的例子:

SSH://programmer@192.168.1.150:5522 / d:/存储库/ MyProyect /中继线

我目前使用MercurialHG而非CLI。我希望这有帮助

JQ

解决方案实际上我是从here

获得的

答案 1 :(得分:2)

我刚才有同样的症状,虽然在Ctrl + C后hg有点帮助 - 显然plink正在等我说y / n“将服务器保存到缓存”。不幸的是,hg无法以交互方式将我的y / n传递给它(也没有告诉我plink打印的东西很重要......)

解决方案:

  1. 一次plink到主机并将服务器信息保存到缓存
  2. -batch添加到plink命令行,以便下次发生这种情况时会中止。
  3. 我还将我的密钥添加到选美,所以我不需要在其他地方输入密码。

    .hgrc文件的完整示例(Win + R,notepad %USERPROFILE%\.hgrc):

    [ui]
    ssh=C:\Path\To\plink.exe -C -batch -ssh -i C:\Path\To\My\putty-private-ssh-key.ppk
    

答案 2 :(得分:1)

另一种选择是尝试使用hg和ssh的Cygwin版本。您可以使用-e选项记录该版本中的SSH问题;例如,hg clone -e'ssh -vvv'ssh:// you @ server / repo ...

答案 3 :(得分:1)

我遇到了同样的问题。不确定它与你的关系如何,但这对我有用。 首先,我将解释我的设置。 我在我的实时网站mysite.com上有一个存储库 我在本地计算机上的mysite.com文件夹中有一个本地存储库 我有其他存储库,因此我将[ui]设置添加到本地计算机上每个存储库文件夹中的/.hg/.hgrc文件而不是Mercurial.ini文件。

首先,如果您已经通过Putty连接,请保存会话,因为Plink可以使用存储的会话。使用Pageant并添加密钥。 尝试从命令行运行plink以使用存储的会话进行连接。例如,我在Putty中将我的会话保存为“mysite”。

C:\>plink mysite
    Using username "mysite".
    Last login: Fri Feb 26 21:16:05 2010 from ca-xxx-xx-x-xxx.sta.host.net
    ←]0;mysite@server:~[mysite@server ~]$

如果可行,请在.hgrc文件中尝试以下内容

[path]
default = ssh://mysite@myhost
[ui]
username = RB <admin@mysite.com>
ssh=plink.exe -ssh -i mysite

Plink在我的PATH中设置,由于mysite会话已存储在Putty中,因此它知道要查找的内容。

我试图拉动,所以我正在测试:

hg pull --debug --traceback

希望有所帮助。

编辑:对不起,你来不及使用tortoiseHG而不是putty。希望它无论如何都有帮助。

答案 4 :(得分:1)

在我的情况下,我能够连接到我的服务器一次,但第二次失败。

我有相同的设置,它完美地工作......但只有一次。我存储的会话中没有任何内容。

[ui]
ssh=C:\Path\To\plink.exe -C -batch -ssh -i C:\Path\To\My\putty-private-ssh-key.ppk

答案 5 :(得分:0)

也许是'hg'不在路径中的情况。您可以从命令行中看到正在调用'hg'作为'hg'运行,这意味着它必须位于服务器的路径中。尝试使用--remotecmd选项进行克隆,以提供服务器上的hg可执行文件的完整路径(祝你好好引用Windows引用)。

你的plink hg version测试可能会起作用,因为它是作为交互式shell启动的,它会获得不同的路径 - 至少经常阻碍unix上的人。