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_PROMPTque cuando se configura0deshabilitará 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-repole pedirá nombre de usuario y contraseñaGIT_TERMINAL_PROMPT=0 git clone https://github.com/some/non-existing-repofallará 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.shLuego, al comenzar git:
GIT_SSH="sshnoprompt.sh" git clone foo@dummyserver:not_a_repoY 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/repoLa configuración
core.askPassfunciona pasando el control de manejo de credenciales al programa antes mencionado. Sin embargo, dado que$echono 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/gitrepositorio público en un repositorio privado que conozca.Para endulzar el trato, ni siquiera necesitaría hacer referencia a un programa como
echoen primer lugar. Simplemente pasar la configuración de git-c core.askPasssin 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
$echoes una referencia variable que (al estar desarmado) se expande a una cadena vacía, por lo que no tiene ningún sentido. Si colocaechoallí (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/nullynohup .. &no parecen funcionar.