Al clonar repositorios git en herramientas automatizadas: front-end web, sistemas CI, a veces la invocación git clone abre un mensaje que solicita el nombre de usuario y la contraseña (por ejemplo, al clonar un repositorio Github inexistente o en un nuevo nodo que no tiene claves ssh) )
¿Cómo hago que git simplemente falle (preferiblemente con un mensaje de error sensible y un código de salida) en lugar de esperar a que el proceso del servidor le dé un nombre de usuario y contraseña?
git
automation
Tin Tvrtković
fuente
fuente
Respuestas:
En git versión 2.3 hay una variable de entorno
GIT_TERMINAL_PROMPT
que cuando se configura0
deshabilitará la solicitud de credenciales.Puede obtener más información al respecto en
man git
(después de actualizar a la versión de git2.3
) o en esta publicación de blog en github .Ejemplos:
git clone https://github.com/some/non-existing-repo
le pedirá nombre de usuario y contraseñaGIT_TERMINAL_PROMPT=0 git clone https://github.com/some/non-existing-repo
fallará sin solicitar nombre de usuario y contraseñafuente
Si está utilizando la autenticación ssh y en Linux, puede crear un reemplazo del comando ssh para deshabilitarlo.
Cree un archivo llamado "sshnoprompt.sh" con:
ssh -oBatchMode=yes $@
Haga que este archivo sea ejecutable con
chmod +x sshnoprompt.sh
Luego, al comenzar git:
GIT_SSH="sshnoprompt.sh" git clone foo@dummyserver:not_a_repo
Y no permitirá preguntas o preguntas interactivas sobre git, no debería poder pedirle nada al usuario.
fuente
Trabajando desde git versión 1.8.3.1;
git clone -c core.askPass $echo url/or/path/to/git/repo
La configuración
core.askPass
funciona pasando el control de manejo de credenciales al programa antes mencionado. Sin embargo, dado que$echo
no puede hacer nada excepto la salida, el intento de clonación falla rápidamente y se aplica la respectiva redirección de bash. Este código solo se invoca en el caso de que el repositorio de git sea privado y canalizará la salida de error que indica que la autenticación falló para el repositorio en particular. Puede probar esto en elhttps://github.com/git/git
repositorio público en un repositorio privado que conozca.Para endulzar el trato, ni siquiera necesitaría hacer referencia a un programa como
echo
en primer lugar. Simplemente pasar la configuración de git-c core.askPass
sin la siguiente entrada aún causaría un error en el caso de que el repositorio sea privado ya que el código no sabrá a qué programa descargar el manejo de credenciales. Si bien este es ciertamente un método más antiguo y simple que los otros mencionados aquí, no sé si tendrá el mismo efecto en versiones anteriores de git.fuente
$echo
es una referencia variable que (al estar desarmado) se expande a una cadena vacía, por lo que no tiene ningún sentido. Si colocaecho
allí (sin el signo de dólar), también sería incorrecto ya que se interpretaría como ubicación del repositorio. Tendría que ser así-c core.askPass=echo
.Dependiendo de cómo esté ejecutando git, redirigir stdin o stdout para que no estén conectados a los terminales evitará que git solicite detalles y solo provocará un error.
Esto también le permitiría mostrar errores (o al menos registros) en el servicio web.
fuente
</dev/null
ynohup .. &
no parecen funcionar.