Search
Write a publication
Pull to refresh

Удалённый Git-репозиторий: проблема с SSH-сервером под Windows

Как только я услышал о Git, сразу же заинтересовался, захотелось попробовать на практике. Но опыта работы в Linux у меня слишком мало. Что же касается ОС Windows, Git портировали, но насколько я понял – сторонние разработчики. Вроде работает, но информации немного. Начав работать с Git под Виндой, я столкнулся с несколькими проблемами. Что интересно, первым дело Гугл находил практически по каждой из них следующее:

«Git плохо работает под Windows, не тратье время!».

Однако стоило поискать получше, и на все вопросы находились ответы. На все, кроме одного – никак не получалось настроить работу через SSH с удалённым сервером (на котором тоже Windows). Поиск ничего не дал, в итоге, потратив кучу времени и усилий, решил проблему экспериментальным путём. И хочу поделиться информацией, дабы помочь другим.

Итак, я нашёл 2 статьи, где очень подробно описано как и что делать (именно про SSH сервер под Windows):
HOWTO_CentralServerWindowsXP
setting-up-a-msysgit-server-with-copssh-on-windows
Выполнив все описанные в статьях действия, я попытался склонировать репозиторий, и получил следующее:

fatal: The remote end hung up unexpectedly

Причём я мог заходить на сервер по SSH через Putty, смотреть и копировать файлы – т.е. SSH работал нормально. Так почему же не работал Git? Поиск по «fatal: The remote end hung up unexpectedly» давал всё что угодно, только не мою проблему. Тогда я решил посмотреть по логам SSH-сервера, какие команды шлёт Git. Задача кстати оказалась нетривиальной, но не буду утомлять подробностями. Как выяснилось, Git шлёт следующее:

git-upload-pack <path-to-repo>

Когда я запустил это в командной строке на серверной машине, в консоль вывелось знакомое «fatal: The remote end hung up unexpectedly», но кроме этого появилось окно с сообщением «Библиотека libiconv2.dll не найдена». Всё оказалось просто – после копирования этой dll из папки msysGit в system32 (на сервере конечно же) всё заработало. Git успешно клонировал репозиторий с удалённого сервера (с push, pull и fetch проблем тоже не было).

Ещё, в указанных выше статьях говорится, что при установке msysGit нужно обязательно выбирать plink, а не OpenSSH. Практика показала, что можно работать и через OpenSSH – в этом случае не нужно генерировать private key (.ppk) и использовать Pageant. Вместо этого нужно файл [user].key скопировать в C:\Documents and Settings\[user]\.ssh (или C:\Users\[user]\.ssh), и переименовать в id_rsa (без расширения). В общем, выбирайте как удобнее.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.