Как только я услышал о Git, сразу же заинтересовался, захотелось попробовать на практике. Но опыта работы в Linux у меня слишком мало. Что же касается ОС Windows, Git портировали, но насколько я понял – сторонние разработчики. Вроде работает, но информации немного. Начав работать с Git под Виндой, я столкнулся с несколькими проблемами. Что интересно, первым дело Гугл находил практически по каждой из них следующее:
«Git плохо работает под Windows, не тратье время!».
Однако стоило поискать получше, и на все вопросы находились ответы. На все, кроме одного – никак не получалось настроить работу через SSH с удалённым сервером (на котором тоже Windows). Поиск ничего не дал, в итоге, потратив кучу времени и усилий, решил проблему экспериментальным путём. И хочу поделиться информацией, дабы помочь другим.
Итак, я нашёл 2 статьи, где очень подробно описано как и что делать (именно про SSH сервер под Windows):
HOWTO_CentralServerWindowsXP
setting-up-a-msysgit-server-with-copssh-on-windows
Выполнив все описанные в статьях действия, я попытался склонировать репозиторий, и получил следующее:
Причём я мог заходить на сервер по SSH через Putty, смотреть и копировать файлы – т.е. SSH работал нормально. Так почему же не работал Git? Поиск по
Когда я запустил это в командной строке на серверной машине, в консоль вывелось знакомое «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 (без расширения). В общем, выбирайте как удобнее.
«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 (без расширения). В общем, выбирайте как удобнее.