Pregunta

He estado usando git para sincronizar dos copias de mi proyecto, una es mi casilla local y la otra el servidor de prueba. Este es un problema que ocurre cuando inicio sesión en nuestro servidor de desarrollo remoto usando 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.

(los nombres de los archivos se han cambiado para proteger a los culpables ...!)

Ambos cuadros ejecutan Solaris 10 AMD. He realizado algunas excavaciones, si agrego --upload-pack = $ (el cual git-upload-pack) el comando funciona (y prueba que $ PATH contiene el ruta a 'git-upload-pack' según la solución RTFM) pero esto es realmente molesto, además 'git push' no funciona, porque no creo que haya un --unpack = opción.

Por cierto, todos los comandos de git funcionan bien desde mi caja local, es la misma versión del software (1.5.4.2), instalado en el mismo montaje NFS en / usr / local / bin .

¿Alguien puede ayudar?

¿Fue útil?

Solución

Asegúrese de que git-upload-pack esté en la ruta de acceso desde un shell sin inicio de sesión. (En mi máquina está en / usr / bin ).

Para ver cómo se ve tu ruta en la máquina remota desde un shell que no es de inicio de sesión, prueba esto:

ssh you@remotemachine echo \$PATH

(Eso funciona en Bash, Zsh y tcsh, y probablemente también en otros shells).

Si la ruta que devuelve no incluye el directorio que tiene git-upload-pack , debe corregirlo configurándolo en .bashrc (para Bash), .zshenv (para Zsh), .cshrc (para tcsh) o equivalente para su shell.

Deberá realizar este cambio en la máquina remota.

Si no está seguro de qué ruta necesita agregar a su PATH remoto, puede encontrarla con este comando (debe ejecutar esto en la máquina remota):

which git-upload-pack

En mi máquina que imprime / usr / bin / git-upload-pack . Por lo tanto, en este caso, / usr / bin es la ruta que necesita para asegurarse de que esté en su shell remoto .

Otros consejos

También puedes usar el " -u " Opción para especificar la ruta. Encuentro esto útil en máquinas donde mi .bashrc no se obtiene en sesiones no interactivas. Por ejemplo,

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

Sobre la base de Brian's Para responder , la ruta del paquete de carga se puede configurar de forma permanente ejecutando los siguientes comandos después de la clonación, lo que elimina la necesidad de --upload-pack en las solicitudes de extracción / recuperación posteriores. De manera similar, la configuración de Receive-Pack elimina la necesidad de --receive-pack en las solicitudes de inserción.

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

Estos dos comandos son equivalentes a agregar las siguientes líneas al .git / config de un repo.

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

Los usuarios frecuentes de clone -u pueden estar interesados ??en los siguientes alias. myclone debe ser autoexplicativo. myfetch / mypull / mypush se puede usar en repositorios cuya configuración no se ha modificado como se describe anteriormente al reemplazar git push por git mypush , y así sucesivamente.

[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

Encontré y usé (con éxito) esta solución:

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

Gracias a Paul Johnston .

Mac OS X y algunos otros Unixes tienen al menos la ruta del usuario compilada en sshd por razones de seguridad, por lo que los que instalamos git como / usr / local / git / {bin, lib, ...} pueden tener problemas como los ejecutables de git no están en la ruta precompilada. Para anular esto, prefiero editar mi / etc / sshd_config cambiando:

#PermitUserEnvironment no

a

PermitUserEnvironment yes

y luego cree los archivos ~ / .ssh / environment según sea necesario. Mis usuarios de git tienen lo siguiente en su archivo ~ / .ssh / environment:

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

La expansión de la variable de nota no se produce cuando se lee el archivo ~ / .ssh / environment así:

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

no funcionará.

Para bash, se debe colocar en .bashrc no en .bash_profile (.bash_profile también es solo para shells de inicio de sesión).

La solución de Matt no funcionó para mí en OS X, pero Paul sí.

La versión corta del enlace de Paul es:

Se creó / usr / local / bin / ssh_session con el siguiente texto:

#!/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

Ejecutar:

  

chmod + x / usr / local / bin / ssh_session

Agregue lo siguiente a / etc / sshd_config :

  

ForceCommand / usr / local / bin / ssh_session

Obtuve estos errores con la versión MsysGit.

Después de seguir todos los consejos que pude encontrar aquí y en otros lugares, terminé:

  

instalando la versión Cygwin de Git

en el servidor (Win XP con Cygwin SSHD), esto finalmente lo solucionó.

Todavía utilizo el lado del cliente de la versión MsysGit

  

..de hecho, es la única forma en que funciona   para mí, ya que consigo errores POSIX con   el tirón Cygwin Git de ese mismo   servidor sshd

Sospecho que todavía se necesita algo de trabajo en este lado del uso de Git ... (ssh + facilidad de extracción / inserción en Windows)

Como Johan señaló muchas veces su .bashrc que se necesita:

ln -s .bash_profile .bashrc

Debes agregar el

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

antes de esta línea en .bashrc:

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

De lo contrario, no se ejecutarán todas las declaraciones de exportación ( vea aquí ).

Para zsh necesitas ponerlo en este archivo: ~ / .zshenv

Por ejemplo, en OS X usando el paquete git-core de MacPorts:

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

¡He estado teniendo problemas para conectarme a un repositorio de Gitolite usando SSH de Windows y resultó que mi problema era PLINK! Seguía pidiéndome una contraseña, pero ssh gitolite @ [host] devolvería la lista de repo bien.

Comprueba tu variable de entorno: GIT_SSH. Si está configurado en Plink, inténtelo sin ningún valor (" establecer GIT_SSH = ") y vea si funciona.

Agregue la ubicación de su git-upload-pack al archivo .bashrc del usuario remoto de git.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top