Ich habe git verwendet, um zwei Kopien meines Projekts synchron zu halten. Eine ist meine lokale Box, die andere der Testserver. Dies ist ein Problem, das auftritt, wenn ich mich mit ssh bei unserem Remote-Entwicklungsserver anmelde.
git clone [email protected]:/home/chris/myproject
Initialized empty Git repository in /tmp/myproject/.git/
Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
fetch-pack from '[email protected]:/home/chris/myproject' failed.
(Die Dateinamen wurden geändert, um die Schuldigen zu schützen ...!)
Auf beiden Boxen wird Solaris 10 AMD ausgeführt. Ich habe ein bisschen gegraben, wenn ich hinzufüge, dass --upload-pack=$(which git-upload-pack)
der Befehl funktioniert (und beweist, dass er $PATH
den Pfad zu 'git-upload-pack' gemäß der RTFM-Lösung enthält), aber das ist wirklich ärgerlich, und 'git push' funktioniert nicht. weil ich glaube nicht, dass es eine --unpack=
Option gibt.
Übrigens funktionieren alle Git-Befehle von meiner lokalen Box aus einwandfrei. Es handelt sich um dieselbe Version der Software (1.5.4.2), die auf demselben NFS-Mount unter installiert ist /usr/local/bin
.
Kann jemand helfen?
quelle
/opt/local/bin
. Das Hinzufügen zu meinem.bashrc
ViaPATH=$PATH:/new/path/here
hat für mich funktioniert."ssh .. echo \$PATH"
Befehl zeigt Ihnen den Pfad auf dem Remotecomputer an, der sich möglicherweise von Ihrem Anmeldepfad unterscheidet. Dies ist jedoch von entscheidender Bedeutung, damit er funktioniert, und Sie können dies tun, indem Sie PATH so einstellen, dass git in den.bashrc
auf dem Computer aufgenommen wird Remote-Maschine. Laut Manpage werden.profile
/.bash_profile
nur für interaktive Logins gelesen.Sie können auch die Option "-u" verwenden, um den Pfad anzugeben. Ich finde dies hilfreich auf Computern, auf denen meine .bashrc-Datei nicht in nicht interaktiven Sitzungen bezogen wird. Beispielsweise,
quelle
Aufbauend auf Brians Antwort kann der Upload-Pack-Pfad dauerhaft festgelegt werden, indem nach dem Klonen die folgenden Befehle ausgeführt werden, sodass
--upload-pack
nachfolgende Pull / Fetch-Anforderungen nicht mehr erforderlich sind . In ähnlicher Weise entfällt durch das Einstellen des Empfangspakets die Notwendigkeit--receive-pack
von Push-Anforderungen.Diese beiden Befehle entsprechen dem Hinzufügen der folgenden Zeilen zu einem Repo
.git/config
.Häufige Benutzer von
clone -u
interessieren sich möglicherweise für die folgenden Aliase. myclone sollte selbsterklärend sein. myfetch / mypull / mypush kann für Repos verwendet werden, deren Konfiguration nicht wie oben beschrieben durch Ersetzengit push
durchgit mypush
usw. geändert wurde .quelle
--receive-pack
Option zugit-push
!git push --receive-pack /full/path/to/git-receive-pack
es selbst, optimieren Sie es, bis es erfolgreich ist, und ändern Sie dann .git / config (oder führen Sie "git config" aus), um den Pfad für das Empfangspaket dauerhaft festzulegen.Ich habe dieses Update gefunden und (erfolgreich) verwendet:
Vielen Dank an Paul Johnston .
quelle
Mac OS X und einige andere Unixe haben zumindest den Benutzerpfad aus Sicherheitsgründen in sshd kompiliert, sodass diejenigen von uns, die git als / usr / local / git / {bin, lib, ...} installieren, als git in Schwierigkeiten geraten können ausführbare Dateien befinden sich nicht im vorkompilierten Pfad. Um dies zu überschreiben, ziehe ich es vor, meine / etc / sshd_config-Änderung zu bearbeiten:
zu
und erstellen Sie dann nach Bedarf ~ / .ssh / Umgebungsdateien. Meine Git-Benutzer haben Folgendes in ihrer ~ / .ssh / Umgebungsdatei:
Beachten Sie, dass beim Lesen der Datei ~ / .ssh / environment keine Variablenerweiterung auftritt:
wird nicht funktionieren.
quelle
Matts Lösung funktionierte unter OS X nicht für mich, Pauls jedoch.
Die Kurzversion von Pauls Link lautet:
Erstellt
/usr/local/bin/ssh_session
mit folgendem Text:Ausführen:
Fügen Sie Folgendes hinzu
/etc/sshd_config
:quelle
Für bash muss es in .bashrc und nicht in .bash_profile abgelegt werden (.bash_profile gilt auch nur für Login-Shells).
quelle
Ich habe diese Fehler mit der MsysGit-Version erhalten.
Nachdem ich alle Ratschläge befolgt hatte, die ich hier und anderswo finden konnte, endete ich:
Auf dem Server (Win XP mit Cygwin SSHD) wurde dies schließlich behoben.
Ich verwende immer noch die clientseitige MsysGit-Version
Ich vermute, dass auf dieser Seite der Git-Nutzung noch einige Arbeiten erforderlich sind. (SSH + einfaches Ziehen / Drücken in Windows)
quelle
Wie Johan oft darauf hingewiesen hat, dass .bashrc benötigt wird:
ln -s .bash_profile .bashrc
quelle
Sie müssen das hinzufügen
vor dieser Zeile in der .bashrc:
Andernfalls werden nicht alle Exportanweisungen ausgeführt ( siehe hier ).
quelle
Mein Fall ist auf Win 10 mit GIT-Bash und ich habe kein GIT unter Standardstandort. Stattdessen habe ich Git unter / app / local / bin. Ich habe die von @Garrett bereitgestellten Befehle verwendet, muss aber den Pfad ändern, um mit double / zu beginnen:
Andernfalls fügt die GIT Ihren Windows-GIT-Pfad vor.
quelle
Für zsh müssen Sie es in diese Datei einfügen: ~ / .zshenv
Beispiel: Unter OS X mit dem Git-Core-Paket von MacPorts:
$ echo 'export PATH = / opt / local / sbin: / opt / local / bin: $ PATH'> ~ / .zshenv
quelle
Ich hatte Probleme beim Herstellen einer Verbindung zu einem Gitolite-Repo mit SSH unter Windows und es stellte sich heraus, dass mein Problem PLINK war! Es fragte mich immer wieder nach einem Passwort, aber der ssh gitolite @ [host] würde die Repo-Liste in Ordnung zurückgeben.
Überprüfen Sie Ihre Umgebungsvariable: GIT_SSH. Wenn es auf Plink eingestellt ist, versuchen Sie es ohne Wert ("set GIT_SSH =") und prüfen Sie, ob dies funktioniert.
quelle
Fügen Sie den Speicherort Ihrer
git-upload-pack
Datei zur .bashrc-Datei des Remote-Git-Benutzers hinzu.quelle
Es kann so einfach sein, wie git auf dem Remote-Host zu installieren (wie in meinem Fall).
Oder gleichwertig für andere Paketverwaltungssysteme.
quelle