фатальный: ошибка протокола: неверный символ длины строки: Unab - PullRequest
8 голосов
/ 12 марта 2012

У меня Windows Server 2008 R2 Standard Edition. У меня установлен FreeSSHd вместе с Git. Брандмауэр Windows имеет исключения, установленные на порт 22. У меня есть настройки сервера SSH, чтобы принимать только открытые ключи SSH. Я могу нормально войти на сервер, используя терминал (т.е. ssh gregory@hostname). Когда я использую команду git clone (например, git clone ssh://gregory@hostname/path_to_my_repo), я получаю эту ошибку:

фатально: ошибка протокола: неверный символ длины строки: Unab

Я в полной растерянности относительно того, что его вызывает. У меня включены протоколы Shell, SFTP и Tunnel.

Ответы [ 4 ]

4 голосов
/ 31 декабря 2012

забудьте freeSSHd. Он не может быть настроен для работы с Git.

У вас есть два (насколько я мог найти) варианта - пойти с более сложным SSH-сервером для Windows, а затем реализовать это: http://holyhoehle.wordpress.com/2011/01/26/setting-up-a-git-server-on-windows-server-2008-r2-using-msysgit-and-winsshd/

или используйте OpenSSH (CopSSH)

http://java2cs2.blogspot.de/2010/03/setup-git-server-on-windows-machine.html

http://www.timdavis.com.au/git/setting-up-a-msysgit-server-with-copssh-on-windows/

Настройка сервера Git с msysgit в Windows

http://code.google.com/p/tortoisegit/wiki/HOWTO_CentralServerWindowsXP

2 голосов
/ 06 сентября 2012

Git over SSH дословно использует вывод канала SSH. Если эти выходные данные содержат какие-либо ложные данные, не относящиеся к git, команда git не сможет их проанализировать и прекратит работу с неясным сообщением об ошибке. Это может произойти, если у вас есть пользовательский скрипт, который отображает данные, например, когда вы подключаетесь, или если что-то выдает сообщение об ошибке, не понятное git.

Вы заметите, что «Unab» выглядит как начало «Unable», предположительно сообщение об ошибке, предназначенное для человека, а не для git.

Что происходит, когда вы запускаете следующую команду?

ssh gregory@hostname git-upload-pack '/path_to_your_repo'

Теоретически вы должны получить сообщение об ошибке, начинающееся с «Unable». Например, «Невозможно найти git-upload-pack». В этом случае исправлением будет добавление git-upload-pack к вашему пути!

0 голосов
/ 15 июля 2014

В моем случае у меня было

echo $HOSTNAME

в моих файлах .bashrc и .bash_profile, которые я использовал для диагностики некоторых проблем с подключением. Это дало мне сообщение:

fatal: protocol error: bad line length character: [VSR 

когда я пытался git pull из репозитория ssh. Удаление операторов echo заставляет вещи работать; [VSR - это только первые 4 символа из echo.

0 голосов
/ 04 декабря 2013

У меня была такая же проблема сегодня на моей работе ... поэтому я нашел это: Настройка Git Server в Windows Server 2008 R2

Ниже вы увидите следующее:

Чтобы Git работал на сервере:

  1. Если это еще не сделано, установите msysgit на свой сервер (я бы рекомендовал установить его непосредственно на C: \Git или, по крайней мере, путь без пробелов, потому что у меня были странные проблемы с «разнесенными» путями)

  2. Добавьте C: \ Git \ bin в переменную PATH.Это очень важно!!sh.exe и другие зависимости находятся в этой папке

  3. Теперь перейдите в C: \ Git \ bin и добавьте следующие два файла

gup.sh grp.sh 4. Откройте gup.sh в вашем любимом редакторе и вставьте

C:/Git/libexec/git-core/git-upload-pack.exe $* 5. Откройте grp.sh и вставьте

C: / Git / libexec / git-core/git-receive-pack.exe $ * $ * по существу отбирает одинарные кавычки из аргумента пути к хранилищу, поэтому путь с пробелами здесь тоже не сработает, я думаю

В основном мы 'Сделано сейчас, и все операции git с клиента должны работать.Для клона вы должны набрать

git clone -u 'sh gup.sh' ssh://username@server/path/to/myrepo.git или толчок будет

git push --exec 'sh grp.sh' ssh://username@server/path/to/myrepo.git, но это не очень элегантно.

Очистка вещей:

  1. Сначала мы хотим избавиться от всего пути репо, указав удаленный псевдоним

git remote add origin ssh: // username @ server / path / to / myrepo.git Где «origin» будет псевдонимом

  1. Далее мы устанавливаем конфигурацию для git-upload-pack и git-receive-pack, поэтому нам не нужно ссылаться на сценарий оболочки всевремя.

git config remote.origin.uploadpack 'sh gup.sh' и

git config remote.origin.receivepack 'sh grp.sh' Вот и все.Теперь мы можем использовать обычные команды git без каких-либо дополнительных параметров:

git clone origin git push origin master git pull origin ...

...