Question

J’ai utilisé git pour synchroniser deux copies de mon projet, l’une sur ma boîte locale, l’autre sur le serveur de test. C’est un problème qui se produit lorsque je me connecte à notre serveur de développement distant à l’aide de ssh;

git clone me@me.mydevbox.com:/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 'me@me.mydevbox.com:/home/chris/myproject' failed.

(les noms de fichiers ont été modifiés pour protéger les coupables ...!)

Les deux boîtes exécutent Solaris 10 AMD. J'ai creusé, si j'ajoute - upload-pack = $ (quel git-upload-pack) la commande fonctionne (et prouve que $ PATH contient le chemin vers 'git-upload-pack' selon la solution RTFM), mais c’est vraiment ennuyeux, et 'git push' ne fonctionne pas, car je ne pense pas qu’il existe un - unpack = = / code > option.

Incidemment, toutes les commandes git fonctionnent correctement à partir de mon ordinateur local, il s'agit de la même version du logiciel (1.5.4.2), installée sur le même montage NFS sous / usr / local / bin . .

Quelqu'un peut-il aider?

Était-ce utile?

La solution

Assurez-vous que git-upload-pack se trouve sur le chemin d'un shell sans connexion. (Sur ma machine, il se trouve dans / usr / bin ).

Pour voir à quoi ressemble votre chemin sur la machine distante à partir d'un shell non connecté, essayez ceci:

ssh you@remotemachine echo \$PATH

(Cela fonctionne dans Bash, Zsh et tcsh, et probablement aussi dans d'autres shells.)

Si le chemin indiqué ne contient pas le répertoire contenant git-upload-pack , vous devez le réparer en le définissant dans .bashrc (pour Bash), .zshenv (pour Zsh), .cshrc (pour tcsh) ou l’équivalent pour votre shell.

Vous devrez effectuer cette modification sur la machine distante.

Si vous ne savez pas quel chemin vous devez ajouter à votre CHEMIN distant, vous pouvez le trouver avec cette commande (vous devez l'exécuter sur la machine distante):

quel git-upload-pack

Sur ma machine qui imprime / usr / bin / git-upload-pack . Donc, dans ce cas, / usr / bin est le chemin que vous devez vous assurer que se trouve dans votre shell distant non connecté PATH .

Autres conseils

Vous pouvez également utiliser les " -u " option pour spécifier le chemin. Je trouve cela utile sur les machines où mon .bashrc n'est pas acheté lors de sessions non interactives. Par exemple,

git clone -u /home/you/bin/git-upload-pack you@machine:code

Construire sur Brian répondre , le chemin du pack de téléchargement peut être défini de manière permanente en exécutant les commandes suivantes après le clonage, ce qui élimine le besoin de - upload-pack lors de demandes d'extraction / récupération ultérieures. De même, la configuration de receive-pack élimine le besoin de - receive-pack pour les demandes Push.

git config remote.origin.uploadpack /path/to/git-upload-pack
git config remote.origin.receivepack /path/to/git-receive-pack

Ces deux commandes équivalent à l’ajout des lignes suivantes au .git / config d’un référentiel.

[remote "origin"]
    uploadpack = /path/to/git-upload-pack
    receivepack = /path/to/git-receive-pack
Les

utilisateurs fréquents de clone -u peuvent être intéressés par les alias suivants. myclone devrait être explicite. myfetch / mypull / mypush peut être utilisé sur des pensions dont la configuration n'a pas été modifiée comme indiqué ci-dessus en remplaçant git push par git mypush , etc.,

.

[alias]
    myclone = clone --upload-pack /path/to/git-upload-pack
    myfetch = fetch --upload-pack /path/to/git-upload-pack
    mypull  = pull --upload-pack /path/to/git-upload-pack
    mypush  = push --receive-pack /path/to/git-receive-pack

J'ai trouvé et utilisé (avec succès) ce correctif:

# Fix it with symlinks in /usr/bin
$ cd /usr/bin/
$ sudo ln -s /[path/to/git]/bin/git* .

Merci à Paul Johnston .

Mac OS X et certains autres Unix ont au moins le chemin d’utilisateur compilé dans sshd pour des raisons de sécurité; ainsi, ceux qui installent git en tant que / usr / local / git / {bin, lib, ...} peuvent avoir des problèmes car les exécutables git ne sont pas dans le chemin précompilé. Pour éviter cela, je préfère modifier mon / etc / sshd_config en changeant:

#PermitUserEnvironment no

à

PermitUserEnvironment yes

puis créez les fichiers ~ / .ssh / environment selon vos besoins. Mes utilisateurs git ont les éléments suivants dans leur fichier ~ / .ssh / environment:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin

Notez que les variables ne se développent pas lorsque le fichier ~ / .ssh / environment est lu de cette manière:

PATH=$PATH:/usr/local/git/bin

ne fonctionnera pas.

Pour bash, il doit être placé dans .bashrc et non pas .bash_profile (.bash_profile ne concerne que les shells de connexion).

La solution de Matt ne fonctionnait pas pour moi sous OS X, mais celle de Paul.

La version courte du lien de Paul est la suivante:

Créé / usr / local / bin / ssh_session avec le texte suivant:

#!/bin/bash
export SSH_SESSION=1
if [ -z "$SSH_ORIGINAL_COMMAND" ] ; then
    export SSH_LOGIN=1
    exec login -fp "$USER"
else
    export SSH_LOGIN=
    [ -r /etc/profile ] && source /etc/profile
    [ -r ~/.profile ] && source ~/.profile
    eval exec "$SSH_ORIGINAL_COMMAND"
fi

Exécuter:

  

chmod + x / usr / local / bin / ssh_session

Ajoutez les éléments suivants à / etc / sshd_config :

  

CommandeCommande / usr / local / bin / ssh_session

J'ai eu ces erreurs avec la version de MsysGit.

Après avoir suivi tous les conseils que je pouvais trouver ici et ailleurs, je me suis retrouvé:

  

installation de la version Cygwin de Git

sur le serveur (Win XP avec Cygwin SSHD), cela a finalement résolu le problème.

J'utilise toujours le côté client de la version MsysGit

  

.. en fait, c'est la seule façon dont cela fonctionne   pour moi, car je reçois des erreurs POSIX avec   le Cygwin Git tirer de ce même   serveur sshd

Je pense qu’il reste du travail à faire de ce côté de l’utilisation de Git. (ssh + facilité de traction / poussée sous Windows)

Comme Johan l'a souligné à plusieurs reprises, son .bashrc nécessaire:

ln -s .bash_profile .bashrc

Vous devez ajouter le

export PATH=/opt/git/bin:$PATH

avant cette ligne dans le fichier .bashrc:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Sinon, toutes les instructions d'exportation ne seront pas exécutées ( voir ici ).

Pour zsh, vous devez le placer dans ce fichier: ~ / .zshenv

Par exemple, sur OS X utilisant le paquet git-core de MacPorts:

$ echo 'export PATH = / opt / local / sbin: / opt / local / bin: $ PATH' > ~ / .zshenv

J'ai eu des problèmes de connexion à un dépôt Gitolite avec SSH sous Windows et il s’est avéré que mon problème était PLINK! Il n'arrêtait pas de me demander un mot de passe, mais ssh gitolite @ [hôte] renverrait correctement la liste des dépôts.

Vérifiez votre variable d'environnement: GIT_SSH. S'il est défini sur Plink, essayez-le sans valeur ("set GIT_SSH =") et voyez si cela fonctionne.

Ajoutez l'emplacement de votre git-upload-pack dans le fichier .bashrc de l'utilisateur git distant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top