2012-06-20 14 views
17

he leído esta respuesta acerca de ocho y cinco veces, pero hay algo que no estoy entendiendo correctamente:git-carga-pack: comando no encontrado

git-upload-pack: command not found, how to fix this correctly

Cuando intento de clonar un repositorio en mi servidor, me sale el siguiente:

bash: git-upload-pack: command not found 

Pero cuando clon clon dando la opción -u /usr/local/bin/git-upload-pack, todo funciona bien.

Supongo que esto tiene sentido, ya que esa es la posición del paquete git-upload en mi servidor.

La respuesta superior sugiere que mi archivo .bashrc en el servidor debe actualizarse para reflejar esto, ya que el resultado de ssh [email protected] echo \$PATH no devuelve /usr/local/bin. (Devuelve /usr/bin:/bin:/usr/sbin:/sbin).

Pero cuando miro a mi archivo .bashrc, que contiene:

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

Así que ahora estoy confundido.

¿Qué debo hacer para evitar utilizar la opción -u /usr/local/bin/git-upload-pack todo el tiempo? ¿Por qué ssh [email protected] echo \$PATH no devuelve /usr/local/bin? ¿Tiene esto algo que ver con los shells de inicio de sesión y los que no inician sesión?

Por favor ayuda! Gracias por adelantado.

+0

Ver [esta parte del manual 'bash'] (http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files) – kostix

Respuesta

23

Esto está relacionado a este tema:

https://serverfault.com/questions/130834/svnssh-getting-bash-to-load-my-path-over-ssh

ssh no se carga el entorno por defecto cuando se envía un comando sin tener que ir al modo interactivo.

buena solución es la que tiene el archivo .ssh/medio ambiente:

en/etc/ssh/sshd_config añadir:

PermitUserEnvironment yes 

A continuación, sólo crean .ssh/y volcado a envronment.ssh/ambiente:

cd ~/ 
mkdir .ssh 
env > .ssh/environment 

Reiniciar SSH

/etc/init.d/sshd restart 

Ahora al hacer esto desde su máquina local:

ssh [email protected] "which git-upload-pack" 

que s'd llegar

/usr/local/bin/git-upload-pack 

y git clone s'd trabajo.

+1

Estaba intentando acceder a un git repo en mi mac usando ssh. Tuve que editar/etc/ssh/sshd_config y agregar "PermitUserEnvironment yes" y luego reiniciar el sshd a través de las preferencias del sistema-> Compartir-> Eliminar inicio de sesión. No tuve que crear el archivo .ssh/environment – user674669

+0

Parece un error tipográfico en el comando de reinicio. ¿No debería ser: /etc/init.d/ssh restart? – javydreamercsw

11

Sí, tiene que ver con los shells de inicio de sesión y los que no inician sesión. El archivo .bashrc solo se carga en shells que no son de inicio de sesión. Puede usar .bash_profile para shell de inicio de sesión. Simplemente agregue la misma modificación a su PATH en el archivo .bash_profile y debe ser bueno.

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

Usted puede encontrar this is an interesting article on the difference between .bashrc and .bash_profile, and login and non-login shells.

+0

¡Gracias! Tiene perfecto sentido, pero parece que no funciona para mí. Tanto mi '.bash_profile' como' .bashrc' contienen el código 'export PATH =/usr/local/bin: $ PATH', pero esto no está funcionando. 'ssh you @ remotemachine echo \ $ PATH' todavía devuelve'/usr/bin:/bin:/usr/sbin:/sbin'. ¿Razones posibles? (Conjeturas) 1. Estoy en un servidor de Media Temple y hay un archivo .bash_mt_profile. (Pero agregué 'export PATH =/usr/local/bin: $ PATH' para una buena medida y no pareció funcionar.) 2. He iniciado sesión como root. 3. No estoy utilizando bash (pero cuando inicio sesión, dice que puedo editar mi '.bash_profile' para eliminar los mensajes del sistema. – Chris

+0

@Chris: Fuera de interés, ¿su' .bash_profile'/'.bashrc '¿el archivo tiene las permanentes establecidas en 644, es propiedad del usuario correcto y no tiene ningún bit ejecutable? El archivo es de origen, no se ejecuta, pero debe ser propiedad del usuario que intenta la fuente y debe tener 644 (o más) perms. Si sigue fallando después de comprobar esto, siempre puede intentar agregar el cambio de RUTA a '/ etc/profile' o'/etc/profile.d/* '(según su distribución). –

+0

Gracias de nuevo. Sí, las permanentes son 644. Las reinicié de todos modos. No funcionó. Agregué un archivo llamado git.sh a '/ etc/profile.d /' con el código 'export PATH =/usr/local/bin: $ PATH' (¿eso es lo correcto para d ¿o?) y eso tampoco funcionó. Solo puedo suponer que no he hecho algo cegadoramente obvio. – Chris

0

que estaba recibiendo los errores siguientes: git-credential-osxkeychain died of signal 11 Cuando estaba haciendo git tirón, me gustaría tener fatal: https://github.com/.../../info/refs?service=git-upload-pack not found: did you run git update-server-info on the server?

que supongo que tenía que ver con mis anteriores credenciales de GitHub no válidas en el llavero.

  • abierto herramienta de acceso llavero utilizando el espacio de Comando
  • buscado github en la herramienta de acceso llavero
  • eliminado todas las entradas relacionadas con github (ya que ya no lo necesitaba)
  • siguieron la contraseña git instalación sección de almacenamiento en caché de nuevo setup git
  • funcionó

En caso que alguna de las respuestas anteriores no ayuda .

1

Mi solución para este problema

  1. Comprobar camino para el git-carga-pack en el equipo remoto:

    ssh [email protected] 'which git-upload-pack' 
    

Si se da una ruta - copiarlo (sin git-upload-pack y barra inclinada. Ejemplos: /usr/bin, /home/yourname/bin, /whatever/gituploadpack/path, etc.).

  1. compruebe la ruta en la máquina remota durante la cáscara de entrada:

    ssh [email protected] 'echo $PATH' 
    

No hay tal camino (/whatever/gituploadpack/path), ¿no es así? ¡Bueno!

  1. de sesión en la máquina remota:

    ssh [email protected] 
    
  2. abierto.bashrc_profile:

    nano /home/yourname/.bashrc_profile 
    
  3. encontrar estas líneas en su caso:

    if [ -f ~/.bashrc ]; then 
        ~/.bashrc 
    fi 
    

... y cambiarlos por:

if [ -f ~/.bashrc ]; then 
     source ~/.bashrc 
    fi 
  1. Bashrc abierta:

    nano /home/yourname/.bashrc 
    
  2. Añadir estas 4 líneas:

    if [ -d "/whatever/gituploadpack/path" ] ; then 
        PATH="$PATH:/whatever/gituploadpack/path" 
    fi 
    export PATH 
    
  3. de salir del equipo remoto:

    exit 
    
  4. compruebe la ruta en la máquina remota durante la cáscara de entrada:

    ssh [email protected] 'echo $PATH' 
    

¿Ves /whatever/gituploadpack/path? Felicidades!

Tenga en cuenta que no solo ha resuelto el problema git-upload-pack sino también git-receive-pack y otros ejecutables en su /whatever/gituploadpack/path!

2

He resuelto este problema en mi caso al iniciar sesión en la máquina remota, un cuadro de Ubuntu y haciendo sudo apt-get install git. No estoy seguro de si esto es excesivo o no, pero me solucionó el problema al instante.