2009-07-07 7 views
5

У меня окно Windows 2003 с настройкой ssh-сервера. У меня есть msysgit (git версия 1.6.2), установленная как локально, так и на сервере.Как остановить git через ssh на окнах от решения неправильного пути?

Сервер имеет следующий абсолютный путь к моей операции РЕПО:

e:\vc\git\myrepo.git 

, когда пользователь входит в систему он/она будет введена в следующем рабочем каталоге:

e:\vc\git\ 

При выполнении следующих CMD на моем Dev машины:

git clone ssh://[email protected]/myrepo.git testrepo 

я получаю следующее сообщение об ошибке:

fatal: ''/myrepo.git'' does not appear to be a git repository 

По моим бревнам SSH кажется, что мерзавец выполняет эту ЦМД на сервере:

'cmd.exe /c git-upload-pack '/myrepo.git'' 

Выполнение этой команды локально (на сервере) не по той же причине. Я думаю, проблема связана с git, префиксным путем с '/'. Как я могу сказать git не делать этого? Должно ли это работать?

Примечание: git-upload-pack работает, потому что я добавил путь \ gitinstallpath \ libexec \ git-core к пути. По-видимому, это ошибка и будет исправлена ​​в будущем, это была моя работа.

+0

Что SSH вы работаете на сервере? Часть URL-адреса после того, как пользователь @ сервер должен быть в том формате, который он понимает. –

ответ

6

Я решил это, переключив свой ssh-сервер с winssh на openssh (через слой cygwin). Мне удалось подключить штраф (как указано выше) с помощью winsshd, но winsshd неправильно обрабатывал пути с префиксом «/». Вероятно, я мог бы заставить winsshd работать, но переход на cygwin и openssh был быстрее.

Вот good blog post пнуть начать настройку, если ваши в аналогичной ситуации:

+1

+1 для отличного сообщения в блоге о настройке git + ssh-сервера на окнах. –

4

Вы пробовали следующее?

git clone ssh://[email protected]/myrepo testrepo 

Обратите внимание на удаление «.git» с конца пути SSH. Вам нужен только этот суффикс в конце, если у него есть имя удаленного каталога.

Кроме того, вы пробовали какой-либо другой формат URL SSH? Для того, чтобы использовать относительный путь, вы можете попробовать:

git clone ssh://[email protected]/~/myrepo testrepo 

Смотрите git clone man page для получения информации о других форматах URL.

+0

1) в каталоге есть .git. Извините за опечатку, исправленную в вопросе. 2) приводит к ошибке: fatal: '' ~/myrepo.git '' не является репозиторием git –

+0

Я также пробовал: ssh: // myuser @ myip: myrepo.git, но ssh жалуется на порт и не может подключиться. –

3

Если кто-то еще заинтересованы в обходном пути:

Проблемы в том, - cmd.exe не понимают одинарные кавычки параметров. Поэтому вместо этого мы используем sh.

Создать файл gup.sh с линией

 
    git-upload-pack.exe $* 

и grp.sh с

 
    git-receive-pack.exe $* 

на сервере!

Затем запустите:

сервер
 
    git clone -u 'sh gup.sh' ssh://[email protected]/e/vc/git/myrepo.git testrepo 
    git config remote.origin.uploadpack 'sh gup.sh' 
    git config remote.origin.receivepack 'sh grp.sh'