2012-03-12 11 views
8

Mam Windows 2008 R2 Server Standard Edition. Mam FreeSSHd zainstalowany wraz z Git. Zapora systemu Windows ma wyjątki ustawione na port 22. Mam konfigurację serwera SSH, aby akceptować tylko klucze publiczne SSH. Mogę zalogować się na serwerze przy użyciu terminala (tj. ssh [email protected]). Kiedy idę do użyć polecenia git clone (np git clone ssh://[email protected]/path_to_my_repo) otrzymuję ten błąd:fatal: błąd protokołu: zły znak długości linii: Unab

fatal: protocol error: bad line length character: Unab

jestem w absolutnej stratą, co jest przyczyną tego. Mam włączone protokoły Shell, SFTP i Tunnel.

+2

Może to? http: // stackoverflow.com/questions/8170436/git-remote-error-fatal-protocol-error-bad-line-length-character-unab – ellotheth

Odpowiedz

4
+1

Opóźniona odpowiedź, ale pomyślałem, że wspomnę, że powyższy poradnik z WinSSHD działał dla mnie. Wprowadziłem dla naszego zespołu trójwarstwowy system Dev, QA, PRD. Działa idealnie na nasze potrzeby. – gwrichard

2

Git przez SSH używa wiersza wyjścia SSH pipe dosłownie. Jeśli to wyjście zawiera jakiekolwiek fałszywe dane nie związane z git, to komenda git nie przetworzy tego i przerwie z niejasnym komunikatem o błędzie. Może się tak zdarzyć, jeśli masz skrypt użytkownika, który wyświetla rzeczy podczas łączenia się, na przykład, lub jeśli coś wyrzuca komunikat o błędzie niezrozumiany przez git.

Zauważysz, że "Unab" wygląda jak początek "Unable", prawdopodobnie komunikat o błędzie przeznaczony dla człowieka, a nie git.

Co dzieje się po uruchomieniu następującego polecenia?

ssh [email protected] git-upload-pack '/path_to_your_repo' 

Teoretycznie powinieneś otrzymać komunikat o błędzie zaczynający się od "Nie można". Na przykład "Nie można znaleźć pakietu git-upload-pack". W takim przypadku poprawka spowoduje dodanie git-upload-pack do ścieżki!

0

miałem ten sam problem dzisiaj w mojej pracy ... więc znalazłem to: Setting up a Git Server on Windows Server 2008 R2

Co trzeba zobaczyć jest poniżej:

Making Git work on the server:

  1. If not already done, install msysgit on your server (I would recommend to install it directly to C:\Git or at least a path that has no spaces because I had some weird issues with “spaced” paths)

  2. Add C:\Git\bin to the PATH variable. This is very important!! sh.exe and other dependencies are in this folder

  3. Now go to C:\Git\bin and add the following two files

gup.sh grp.sh 4. Open gup.sh in your favorite editor and insert

C:/Git/libexec/git-core/git-upload-pack.exe $* 5. Open grp.sh and insert

C:/Git/libexec/git-core/git-receive-pack.exe $* The $* essentially rips off the single quotes from the repository path argument, so a path that has spaces in it won’t work here either I guess

Basically we’re done now and all git operations from the client should work. For a clone you have to type

git clone -u 'sh gup.sh' ssh://[email protected]/path/to/myrepo.git or a push would be

git push --exec 'sh grp.sh' ssh://[email protected]/path/to/myrepo.git but that is not very elegant.

Cleaning things up:

  1. At first we want to get rid of the whole repo path by specifying a remote alias

git remote add origin ssh://[email protected]/path/to/myrepo.git Where “origin” would be the alias name

  1. Next we set the config for the git-upload-pack and git-receive-pack so we don’t have to reference the shell script all the time.

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

git config remote.origin.receivepack 'sh grp.sh' That’s it. Now we can use the normal git commands without any additional parameters:

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

0

W moim przypadku, miałem w moim pliku .bashrc i .bash_profile, których używałem do diagnozowania niektórych problemów z połączeniem. To dało mi wiadomość:

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

kiedy próbowałem uzyskać git pull z repozytorium ssh. Usunięcie instrukcji echo sprawia, że ​​wszystko działa; "[VSR" to tylko pierwsze 4 znaki z echo.

Powiązane problemy