Ich habe eine Windows 2008 R2 Server Standard Edition. Ich habe FreeSSHd zusammen mit Git installiert. Für die Windows-Firewall sind Ausnahmen auf Port 22 festgelegt. Ich habe den SSH-Server so eingerichtet, dass er nur öffentliche SSH-Schlüssel akzeptiert. Ich kann mich über Terminal mit dem Server anmelden (d. H.% Co_de%). Wenn ich den Befehl ssh gregory@hostname
verwende (z. B. git clone
), erhalte ich folgende Fehlermeldung:
fatal: Protokollfehler: Zeilenlänge Zeichen: Unab
Ich habe einen absoluten Verlust, was das verursacht. Ich habe Shell-, SFTP- und Tunnel-Protokolle aktiviert.
Vergessen Sie freeSSHd. Es kann nicht für die Ausführung mit Git konfiguriert werden.
Sie haben zwei (soweit ich finden konnte) Möglichkeiten - gehen Sie mit einem anspruchsvolleren SSH-Server für Windows und implementieren Sie dies dann: Ссылка
oder gehen Sie mit OpenSSH (CopSSH)
Git über SSH verwendet die Ausgabe der SSH-Pipe wortwörtlich. Wenn diese Ausgabe falsche Daten enthält, die nicht mit git in Zusammenhang stehen, kann der Befehl git diesen nicht analysieren und bricht mit einer obskuren Fehlermeldung ab. Das kann passieren, wenn Sie ein Benutzerskript haben, das zum Beispiel beim Verbinden anzeigt, oder wenn etwas eine Fehlermeldung ausgibt, die von git nicht verstanden wird.
Sie werden feststellen, dass "Unab" wie der Anfang von "Unable" aussieht, vermutlich eine Fehlermeldung, die für einen Menschen gedacht ist, nicht wirklich.
Was passiert, wenn Sie den folgenden Befehl ausführen?
%Vor%Theoretisch sollten Sie eine Fehlermeldung bekommen, die mit 'Unable' beginnt. Zum Beispiel: "Ich kann git-upload-pack nicht finden". In diesem Fall besteht die Lösung darin, git-upload-pack zu Ihrem Pfad hinzuzufügen!
Ich hatte heute dasselbe Problem bei meinem Job ... also habe ich Folgendes gefunden: Einrichten eines Git-Servers unter Windows Server 2008 R2
Was Sie sehen müssen, ist unten:
Git funktioniert auf dem Server:
Falls noch nicht geschehen, installieren Sie msysgit auf Ihrem Server (ich würde empfehlen, es direkt in C: \ Git oder zumindest in einem Pfad zu installieren, der keine Leerzeichen, weil ich einige seltsame Probleme mit "beabstandeten" Pfaden hatte)
Fügen Sie C: \ Git \ bin zur PATH-Variablen hinzu. Dies ist sehr wichtig!! sh.exe und andere Abhängigkeiten sind in diesem Ordner
Gehen Sie jetzt zu C: \ Git \ bin und fügen Sie die folgenden zwei Dateien hinzu
gup.sh grp.sh 4. Öffnen Sie gup.sh in Ihrem bevorzugten Editor und fügen Sie
einein
C:/Git/libexec/git-core/git-upload-pack.exe $*
5. Öffnen Sie grp.sh und fügen SieC: /Git/libexec/git-core/git-receive-pack.exe $ * Das $ * im Wesentlichen entfernt die einfachen Anführungszeichen vom Repository-Pfadargument, also a Pfad, der Leerzeichen enthält, wird hier auch nicht funktionieren, denke ich
Grundsätzlich sind wir jetzt fertig und sollten alle Git-Operationen vom Client ausführen Arbeit. Für einen Klon müssen Sie
eingeben
git clone -u 'sh gup.sh' ssh://username@server/path/to/myrepo.git
oder a Push wäre
git push --exec 'sh grp.sh' ssh://username@server/path/to/myrepo.git
aber das ist nicht sehr elegant.Dinge aufräumen:
- Zunächst wollen wir den gesamten Repo-Pfad durch Angabe eines Remote-Alias
loswerdengit remote addursprung ssh: //username@server/path/to/myrepo.git Wo "Ursprung" wäre der Aliasname
- Als nächstes setzen wir die Konfiguration für das git-upload-pack und das git-receive-pack, so dass wir nicht ständig auf das Shell-Skript verweisen müssen.
git config remote.origin.uploadpack 'sh gup.sh'
und
git config remote.origin.receivepack 'sh grp.sh'
Das ist es. Jetzt können wir die normalen Git-Befehle ohne zusätzliche Parameter verwenden:git Klon Ursprung git push Herkunft master git pull Herkunft ...
In meinem Fall hatte ich ein
%Vor%in meiner .bashrc und .bash_profile, die ich verwendet habe, um einige Verbindungsprobleme zu diagnostizieren. Dies gab mir die Nachricht:
%Vor% wenn ich versucht habe, git pull
von einem ssh Repo zu bekommen. Durch Entfernen der echo
-Anweisungen funktioniert alles. Die ' [VSR
' sind nur die ersten 4 Zeichen von echo
.
Tags und Links git ssh repository