Mercurial через ssh клиент и сервер в Windows
Я пытаюсь настроить Mercurial для использования как с сервером Windows (freeSSHd), так и с клиентом (как с командной строкой, так и с TortoiseHG). Я использую самые последние версии всего... все загруженные за последние несколько дней. Используя открытый ключ auth, я смог подключиться к серверу, и я могу использовать 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: Кажется, что нет никакого использования ЦП или увеличения использования памяти на сервере. Кажется, он ждет, пока клиент отправит запрос или что-то подобное.
11/19/2009: Дополнительная информация:
Проблема, безусловно, находится на стороне freeSSHd/server уравнения. Соединение с битбакетом поверх ssh с одним и тем же набором клавиш отлично работает. Все еще работаю над этим.
Ответы
Ответ 1
Решение, которое сработало для меня, отключает параметр "Использовать новый консольный движок", который находится на вкладке SSH. Другое дело, путь. SSH://ssh_user @SSH_Server_Address: SSH_Port/Win_Drive_Letter:/Path_To_HG_Repository
Конкретный пример:
SSH://[email protected]: 5522/D:/Repository/MyProyect/багажник
В настоящее время я использую MercurialHG, а не CLI. Я надеюсь, что эта помощь
JQ
Решение на самом деле я получил его от здесь
Ответ 2
У меня появились те же симптомы, хотя hg был немного полезнее после Ctrl + C. По-видимому, plink ждал, когда я скажу y/n, чтобы "сохранить сервер в кеш". К сожалению, hg не смог передать мне y/n в интерактивном режиме (и не сказал мне, что plink напечатал что-то важное...)
Решение:
- plink для узла один раз и сохранить информацию о сервере в кеше
- добавьте
-batch
в командную строку plink, чтобы в следующий раз это произошло, вместо этого она прерывается.
Я также добавляю свой ключ к конкурсу, поэтому мне больше не нужно вводить пароль.
Полный пример файла .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
Ответ 3
Другой вариант - попробовать Cygwin версии hg и ssh. Вы можете регистрировать проблемы SSH в этой версии с опцией -e; например, hg clone -e 'ssh -vvv' ssh://you @server/repo...
Ответ 4
Я столкнулся с этой проблемой. Не уверен, как это относится к вашему, но это то, что сработало для меня.
Во-первых, я объясню свою настройку.
У меня есть репозиторий на моем живом сайте mysite.com
У меня есть локальный репозиторий на моем локальном компьютере в папке mysite.com
У меня есть другие репозитории, поэтому я добавляю [ui] настройки в файл /.hg/.hgrc в каждой папке репозитория на моей локальной машине, а не в файле Mercurial.ini.
Во-первых, если вы уже подключились через Putty, сохраните сеанс, потому что Plink может использовать сохраненные сеансы. Используйте Pageant и добавьте свой ключ.
Попробуйте запустить plink из командной строки для подключения с использованием сохраненного сеанса. Например, я сохранил сеанс как "mysite" в Putty.
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;[email protected]:~[[email protected] ~]$
Если это работает, попробуйте следующее в вашем файле .hgrc
[path]
default = ssh://[email protected]
[ui]
username = RB <[email protected]>
ssh=plink.exe -ssh -i mysite
Plink установлен в моей PATH, и поскольку сеанс mysite уже был сохранен в Putty, он знает, что искать.
Я пытался сделать попытку, поэтому я тестировал, используя:
hg pull --debug --traceback
Надеюсь, что это поможет.
Редактирование: Извините, слишком поздно заметили, что вы использовали tortoiseHG вместо шпатлевки. Надеюсь, он все равно поможет.
Ответ 5
В моем случае я смог подключиться к моему серверу один раз, но во второй раз это не удалось.
У меня такая же настройка, и она отлично работала... но только один раз. В моих сохраненных сеансах ничего нет.
[ui]
ssh=C:\Path\To\plink.exe -C -batch -ssh -i C:\Path\To\My\putty-private-ssh-key.ppk
Ответ 6
Возможно, это случай, когда "hg" не находится на пути. Из командной строки вы можете видеть, что "hg" запускается как "hg" , что означает, что он должен находиться на пути к серверу. Попробуйте использовать параметр --remotecmd
для клонирования, чтобы предоставить полный путь к исполняемому файлу hg на сервере (удача в правильном использовании окна).
Возможно, что ваш тест plink hg version
работает, потому что он запускается как интерактивная оболочка, которая получает другой путь - по крайней мере, это часто затихает людей в unix.