2011-12-16 13 views
5

Me gustaría crear un script muy simple, que en última instancia ser llamado por otra aplicación, que actualiza un repositorio Git local:¿Puedo guardar credenciales de git en variables de entorno?

#!/bin/bash 

cd $1 
sudo git pull 

Cuando se ejecuta esta me piden credenciales (soy tirando de un repositorio BitBucket privado).

¿Puedo (brevemente) almacenar credenciales en variables de entorno?

#!/bin/bash 

export GIT_USERNAME=<user> 
export GIT_PASSWORD=<pass> 

cd $1 
sudo git pull 

Lo anterior no funciona. ¿Haría algo? Podría modificar programáticamente la URL de origen, pero eso parece un poco exagerado.

+4

git no utiliza credenciales, se basa en el transporte que se utiliza. ¿Estás usando git sobre ssh? Si es así, debería mirar las claves ssh. –

Respuesta

0

Git no utiliza credenciales, se basa en el transporte que se utiliza.

9

sé que es muy vieja pregunta, pero si realmente necesita para pasar nombre de usuario y la contraseña para la autenticación HTTP básica que puede fijar ayudante de la siguiente manera:

git config credential.helper '!f() { sleep 1; echo "username=${GIT_USER}\npassword=${GIT_PASSWORD}"; }; f' 

ACTUALIZACIÓN: He añadido sleep 1 a la función . En algunos entornos, probablemente sea necesario debido a la condición de raza. Tengo 2 máquinas virtuales con Debian Jessie. Tenían la misma arquitectura pero diferente CPU y diferente número de núcleos. En una de estas máquinas, el ayudante funcionaba bien sin sleep. En el otro no fue así. Después de algunas horas de depuración, ejecuto strace para ver qué está pasando. Y mágicamente comenzó a funcionar. strace acaba de hacer que git sea un poco más lento.

+0

¡Muchas gracias! Funciona bien para empujes basados ​​en HTTP! Para SSH, yo también votaría por claves. –

+0

¿Qué hace el uso del signo de exclamación en ''! F()' hacer aquí? Parece que esto sería una referencia a un comando anterior en la historia. Usar 'bash' para ejecutar lo que está en la cadena auxiliar como un comando simple causa un error con esta sintaxis de todos modos. Tengo curiosidad por qué funciona. – ely

+1

N/m - Ahora veo que esto es exclusivo de git, pero no pude encontrarlo en la documentación de git. El signo de exclamación le dice a git que trate la opción de configuración de cadena como código de shell ejecutable. Para credencial auxiliar, por ejemplo, si no lo trata como ejecutable, entonces intenta agregar la cadena al argumento 'credencial' y seguirlo por otras opciones especificadas en la cadena. – ely

Cuestiones relacionadas