Nombre de usuario y contraseña en el comando para git push


Es posible clonar un repositorio git, especificando nombre de usuario y contraseña en el comando. Ejemplo:

git clone https://username:[email protected]/file.git

¿Es posible especificar también el nombre de usuario y la contraseña al empujar? De modo que, por ejemplo, ejecutar git push origin --all dará como resultado pedir una contraseña. Quiero esto en un solo comando.

(Soy consciente de la capacidad de configurar claves y otras soluciones, pero quiero saber si hay una manera de seguir usando el nombre de usuario y la contraseña con un solo comando.) Yo soy ejecutando Git Bash en Windows 8.1.

Author: Jake, 2015-04-21

4 answers

Sí, puedes hacerlo

git push https://username:[email protected]/file.git --all

En este caso https://username:[email protected]/file.git sustitúyase origin por git push origin --all

Para ver más opciones para git push, try git help push

 86
Author: number5,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-21 15:28:40

De acuerdo con la documentación de Git , el último argumento del comando git push puede ser el repositorio al que desea enviar:

    git push [--all | --mirror | --tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
             [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream]
             [<repository> [<refspec>…]]

Y el parámetro repository puede ser una URL o un nombre remoto.

Así que puede especificar nombre de usuario y contraseña de la misma manera que lo hace en su ejemplo de comando clone.

 3
Author: Alexey Orlenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-21 15:31:30

Git no almacenará la contraseña cuando uses URLs como esa. En su lugar, solo almacenará el nombre de usuario, por lo que solo necesita solicitarle la contraseña la próxima vez. Como se explica en el manual , para almacenar la contraseña, debe usar un ayudante de credenciales externo . Para Windows, puedes usar el Almacén de credenciales de Windows para Git. Este helper también está incluido por defecto en GitHub para Windows.

Al usarlo, su contraseña será automáticamente recordada, por lo que solo tiene que entrar una vez. Así que cuando clone, se le pedirá su contraseña, y luego cada comunicación adicional con el control remoto no le pedirá su contraseña de nuevo. En su lugar, el ayudante de credenciales proporcionará a Git la autenticación.

Esto, por supuesto, solo funciona para la autenticación a través de https; para el acceso ssh ([email protected]/repository.git) utiliza las claves SSH y las que puede recordar usar ssh-agent (o el concurso de PuTTY si está utilizando plink).

 3
Author: poke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-21 15:33:54

Es posible, pero antes de git 2.9.3 (agosto de 2016), un git push imprimiría la url completa utilizada al volver al repositorio clonado.
Eso incluiría su nombre de usuario y contraseña!

Pero no más: Ver commit 68f3c07 (20 Jul 2016), y commit 882d49c (14 Jul 2016) por Jeff King (peff).
(Merged by Junio C Hamano -- gitster -- in commit 71076e1 , 08 Ago 2016)

push: anonimizar URL en estado salida

Commit 47abd85 (fetch: Strip usernames from url's before storing them, 2009-04-17, Git 1.6.4) enseñó fetch a anonimizar URLs.
El propósito principal era evitar pegar contraseñas en los mensajes merge-commit, pero como efecto secundario, también evitamos imprimirlas en stderr.

El lado push no tiene el problema merge-commit, pero probablemente debería evitar imprimirlos en stderr. Podemos reutilizar la misma función de anonimización.

Tenga en cuenta que para que esto aparezca, las credenciales tendrían que aparecer en la línea de comandos o en un archivo de configuración de git, ninguno de los cuales es particularmente seguro.
Así que la gente debería cambiar a usar ayudantes de credenciales en su lugar, lo que hace que este problema desaparezca.

Pero eso no es excusa para no mejorar la situación de las personas que por cualquier razón terminan usando credenciales incrustadas en la URL.

 3
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-11 09:02:47