Клонирование репозитория github для чтения и записи с использованием TortoiseHg

Я пытаюсь клонировать свою личную вилку на github, используя протокол git + ssh с TortoiseHg. Это дает мне довольно странную ошибку. Вот команда

hg clone git+ssh://[email protected]: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 protected]
ssh="C:\Program Files\TortoiseHg\TortoisePlink.exe" -ssh -2 -i "C:\Source\SSHPrivateKey.ppk"

Но я все равно получаю ту же ошибку. Любые идеи?

Обновление 1

Если я запускаю ту же команду из оболочки Git Bash, она работает нормально. Я получаю это.

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

Кажется, что он выглядит специально для ssh.exe, хотя я указал альтернативный путь ssh в mercurial.ini. Но я предполагаю, что эта конфигурация предназначена только для защищенного ssh-сервера mercurial и не применяется к плагину hg- git.

Ответы

Ответ 1

Я нашел способ обойти это, но это довольно хаки. Я заметил, что ProcessMonitor показывал, что ищет ssh.exe в нескольких разных путях, поэтому я скопировал TortoisePlink.exe в папку 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, который поставляется с основной установкой PuTTy. Запустите это и добавьте к нему свой ключ. Затем запустите команду clone еще раз, и она должна аутентифицироваться просто отлично.

Ответ 2

Проведя часы и часы, пытаясь решить это, я нашел один путеводитель, который объяснил это отлично.

Это URL: http://www.codeproject.com/Articles/376058/Step-by-step-Setup-TortoiseHg-for-gitHub

Одна вещь, не упомянутая в руководстве, заключается в том, что 32-битная версия Pageant в комплекте с TortoiseHG не может распознать часть "git @" в URL-адресе и продолжает просить об этом. Загрузка 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

Ответ 3

Я использую "plink.exe" и "pageant.exe" вместо "TortoisePlink.exe". "pageant.exe" автоматически передает пароль, когда "plink.exe" нуждается в нем.

Ответ 4

Я решил эту проблему, скопировав TortoisePlink.exe в ssh.exe. Затем я поместил ssh.exe в свой путь. Пока работает показ, это работает для меня.

Учитывая, что мне нужен ssh.exe на моем пути, мне интересно, hggit даже читает строку ssh = вообще.

Это все еще хакерский, но немного менее хакерский, чем метод @Натана (я не поклонник возиться с файлами внутри \Program Files)

Ответ 5

Я обнаружил, что мне нужно было запустить Pageant и загрузить мой SSH-ключ, а затем сначала клонировать с помощью командной строки, например:

hg clone git+ssh://[email protected]/<username>/<repo>.git

Но с тех пор я мог бы использовать TortoiseHg против GitHub (push и pull) просто отлично (хотя для выполнения проверки подлинности должен работать веб-сайт).