我正在尝试使用TortoiseHg的git + ssh协议在github上克隆我的个人分叉。它给了我一个相当奇怪的错误。这是命令
hg clone git+ssh://git@github.com:myusername/thefork.git
这是在我安装了hg-git模块之后,使用git://语法克隆它可以正常工作。但我相信它与ssh有问题。我得到的错误就是这个。
importing Hg objects into Git
[Error 2] The system cannot find the file specified
我尝试将ssh命令手动添加到mercurial.ini文件中,如下所示
[ui]
username = email@address.com
ssh="C:\Program Files\TortoiseHg\TortoisePlink.exe" -ssh -2 -i "C:\Source\SSHPrivateKey.ppk"
但我仍然得到同样的错误。有什么想法吗?
更新1
如果我从Git Bash shell运行相同的命令,它可以正常工作。我明白了。
importing Hg objects into Git
Counting objects: 1559, done.
Compressing objects: 100% (586/586), done.
Total 1559 (delta 960), reused 1534 (delta 947)
importing Git objects into Hg
at: 0/86
updating to branch default
219 files updated, 0 files merged, 0 files removed, 0 files unresolved
我假设是因为它可以找到ssh.exe并且我的密钥已经导入了。我可以将ssh.exe的路径添加到windows命令提示路径,然后代替上一个错误,我得到了这个。
importing Hg objects into Git
Permission denied (publickey).
abort: the remote end hung up unexpectedly
虽然我在mercurial.ini中指定了备用ssh路径,但它似乎专门针对ssh.exe事件。但我的猜测是,该配置仅适用于支持ssh的mercurial服务器,不适用于hg-git插件。
答案 0 :(得分:8)
我找到了解决这个问题的方法,但这很神秘。我注意到ProcessMonitor在几个不同的路径中显示它正在寻找ssh.exe所以我将TortoisePlink文件复制到了TortoiseHg文件夹并命名为ssh.exe。
copy "C:\Program Files\TortoiseHg\TortoisePlink.exe" "C:\Program Files\TortoiseHg\ssh.exe"
只需进行此更改,它仍然无法通过身份验证。你会得到一个弹出框和这个。
importing Hg objects into Git
abort: the remote end hung up unexpectedly
所以你需要抓住pageant.exe that comes with the main PuTTy install。启动它并将密钥添加到它。然后再次运行clone命令,它应该进行身份验证。
答案 1 :(得分:2)
花了几个小时试图解决这个问题之后,我找到了一个完美解释它的指南。
这是网址: http://www.codeproject.com/Articles/376058/Step-by-step-Setup-TortoiseHg-for-gitHub
指南中没有提到的一点是,与TortoiseHG捆绑在一起的32位版本的Pageant无法识别网址中的“git @”部分,并一直要求它。下载64位版本的Pageant修复了这个错误。
下载64位选美: https://splunk.net/w/PuTTy64bit
我已经开通了一张包含64位Pageant和TortoiseHG的门票: https://bitbucket.org/tortoisehg/thg/issue/2145/bundle-64-bit-pageant-with-64-bit
答案 2 :(得分:1)
我发现我必须启动Pageant并加载我的SSH密钥然后最初使用命令行克隆 ,例如:
hg clone git+ssh://git@github.com/<username>/<repo>.git
但从那时起,我可以使用TortoiseHg对抗GitHub(推拉)就好了(虽然Pageant需要运行才能进行身份验证)。
答案 3 :(得分:0)
我正在使用“plink.exe”和“pageant.exe”而不是“TortoisePlink.exe”。 “pageant.exe”在“plink.exe”需要时自动提供密码短语。
答案 4 :(得分:0)
我通过将TortoisePlink.exe复制到ssh.exe解决了这个问题。然后我将ssh.exe放在我的路径中。只要选美比赛正在运行,这对我有用。
鉴于我的路径中需要ssh.exe,我想知道hggit是否甚至会读取ssh =行。
这仍然是hackish,但是比@ Nathan的技术稍逊一点(我不喜欢搞乱\ Program Files中的文件)