git-upload-pack: commande introuvable, lors du clonage à distance repo Git
J'ai été en utilisant git pour conserver deux copies de mon projet dans la synchro, c'est ma boîte locale, l'autre le serveur de test.
C'est un problème qui se produit lorsque je me connecte sur notre développement à distance du serveur à l'aide de ssh;
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.
(le fichier-les noms ont été changés pour protéger les coupables... !)
Les deux cases exécuter Solaris 10 AMD. J'ai fait quelques recherches, si j'ajoute --upload-pack=$(which git-upload-pack)
la commande fonctionne, (et prouve que $PATH
contient le chemin d'accès à git-upload-pack "que par les RTFM solution) mais c'est vraiment ennuyeux, plus "git push" ne fonctionne pas, parce que je ne pense pas qu'il y est un --unpack=
option.
D'ailleurs, toutes les commandes git, beau travail de ma boîte locale, c'est la même version du logiciel (1.5.4.2), installé sur le même montage NFS à /usr/local/bin
.
Quelqu'un peut-il aider?
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que
git-upload-pack
est sur le chemin de la non-shell de connexion. (Sur ma machine c'est dans/usr/bin
).Pour voir ce que votre chemin ressemble sur la machine distante à partir d'un non-shell de connexion, essayez ceci:
(Qui fonctionne en Bash, Zsh, et tcsh, et probablement d'autres coquilles trop.)
Si le chemin d'accès qu'il donne de ne pas inclure le répertoire qui a
git-upload-pack
, vous avez besoin de réparer par la mise en.bashrc
(pour Bash),.zshenv
(pour Zsh),.cshrc
(pour tcsh) ou l'équivalent de votre shell.Vous aurez besoin de faire cette modification sur la machine distante.
Si vous n'êtes pas sûr du chemin, vous devez ajouter à votre télécommande
PATH
, vous pouvez le trouver avec cette commande (vous devez l'exécuter sur la machine distante):which git-upload-pack
Sur ma machine qui imprime
/usr/bin/git-upload-pack
. Donc dans ce cas,/usr/bin
est le chemin d'accès, vous devez vous assurer que c'est de votre télécommande non-shell de connexionPATH
.[ -z "$PS1" ] && return
qui sort si le shell non-interactif. Une fois que j'ai fait remarquer que cela a fonctionné..profile
par défaut(?),ln -s .profile .bashrc
résoudre ce problème pour moi..return
./opt/local/bin
. En ajoutant ceci à mon.bashrc
viaPATH=$PATH:/new/path/here
a fonctionné pour moi."ssh .. echo \$PATH"
commande va vous montrer le chemin d'accès sur la machine distante, qui peut être différent de votre identifiant chemin, mais ce est la chose essentielle pour obtenir le droit de le faire fonctionner, et vous pouvez le faire en définissant CHEMIN d'accès à inclure git dans le.bashrc
sur la machine distante. Selon le manuel,.profile
/.bash_profile
sont en lecture seule pour les connexions interactives..profile
,.bash_profile
,.login
,.bash_login
etc.) et juste la ligne "export PATH=$PATH:/votre/chemin/vers/git".bashrc
. Ensuite, sur la machine locale, essayezssh you@remote echo \$PATH
: elle doit montrer le chemin avec le /votre/chemin/vers/git sur la fin. Si cela fonctionne, vous devriez être en mesure d'utiliser git via ssh sans problèmes, et vous pourrez les autres trucs à partir de vos fichiers de configuration utilisateur. Si elle échoue, post ce qu'il montre.ssh git@remote echo \$PATH
. à partir de votre ordinateur local.Vous pouvez également utiliser l'option "-u" option pour spécifier le chemin d'accès. Je trouve cela utile sur les machines où mon .bashrc n'obtient pas de source non-sessions interactives. Par exemple,
Bâtiment sur Brian réponse, l'upload-pack de chemin d'accès peut être défini de façon permanente en exécutant les commandes suivantes après le clonage, ce qui élimine la nécessité pour
--upload-pack
sur les pull/récupère la demande. De même, le paramètre receive-pack élimine le besoin pour--receive-pack
, pousser les demandes.Ces deux commandes sont équivalentes à ajouter les lignes suivantes à une pension de
.git/config
.Utilisateurs fréquents de
clone -u
peut-être intéressé par la suite de alias. myclone devrait être auto-explicatif. myfetch/mypull/mypush peut être utilisé sur les pensions de titres dont la config n'a pas été modifiée comme décrit ci-dessus en remplaçantgit push
avecgit mypush
, et ainsi de suite.--receive-pack
option pourgit-push
!git push --receive-pack /full/path/to/git-receive-pack
sur son propre, tordre jusqu'à ce qu'est le succès, puis modifier .git/config (ou exécuter "git config") pour régler durablement la recevoir le pack de chemin.J'ai trouvé et utilisé (avec succès) de ce correctif:
Grâce à Paul Johnston.
Mac OS X et quelques autres systèmes Unix au moins le chemin d'accès de l'utilisateur compilé dans sshd pour des raisons de sécurité, de sorte que ceux d'entre nous qui installer git /usr/local/git/{bin,lib,...} pouvez exécuter des ennuis comme le git exécutables ne sont pas dans le fichier chemin d'accès. Pour remplacer ce que je préfère à modifier mon /etc/sshd_config en train de changer:
à
puis créez ~/.ssh/fichiers d'environnement en tant que de besoin. Mon git les utilisateurs ont de la suite dans leur ~/.ssh/fichier d'environnement:
Remarque variable expansion ne se produit pas lorsque le ~/.ssh/environnement le fichier est en lecture donc:
ne fonctionnera pas.
Pour bash, il faut le mettre en .bashrc pas .bash_profile (.bash_profile est aussi uniquement pour les shells de login).
Matt solution n'a pas fonctionné pour moi sur OS X, mais Paul l'a fait.
La version courte de Paul lien est:
Créé
/usr/local/bin/ssh_session
avec le texte suivant:Exécuter:
Ajouter les éléments suivants à
/etc/sshd_config
:J'ai eu ces erreurs avec la MsysGit version.
Après avoir suivi tous les conseils que j'ai pu trouver ici et d'ailleurs, j'ai fini:
sur le serveur (Win XP avec Cygwin SSHD), c'enfin, il fixe.
J'utilise toujours le MsysGit version côté client
Je soupçonne que certains travail est encore nécessaire de ce côté de Git utilisation..
(ssh+facilité de tirer/pousser dans Windows)
Comme Johan souligné de nombreuses fois son .bashrc qui est nécessaire:
ln -s .bash_profile .bashrc
Vous devez ajouter le
avant cette ligne dans le .bashrc:
Sinon, tous les états ne seront pas exécutées (voir ici).
Pour zsh vous avez besoin de le mettre dans ce fichier: ~/.zshenv
Par exemple, sur OS X à l'aide de git-core package de MacPorts:
$ echo "export PATH=/opt/local/sbin:/opt/local/bin:$PATH" > ~/.zshenv
J'ai eu des problèmes de connexion à un Gitolite repo à l'aide de SSH à partir de Windows et il s'est avéré que mon problème était PLINK! Il arrêtait pas de me demander un mot de passe, mais le ssh gitolite@[hôte] retourne la liste des pensions de l'amende.
Vérifier votre variable d'environnement: GIT_SSH. Si elle est définie à Plink, puis essayer sans aucune valeur ("set GIT_SSH=") et voir si cela fonctionne.
Ajouter l'emplacement de votre
git-upload-pack
à la distance git de l'utilisateur .bashrc fichier.Mon cas, c'est sur Win 10 avec GIT bash et je n'ai pas de GIT en vertu de la position standard. Au lieu de cela, j'ai git dans /app/local/bin.
J'ai utilisé les commandes fournies par @Garrett, mais besoin de changer le chemin d'accès à démarrer avec un lit double /:
Sinon le GIT va ajouter votre Windows GIT chemin en face.