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

107

Es posible clonar un repositorio de git, especificando el nombre de usuario y la 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 presionar? De modo que, por ejemplo, la ejecución git push origin --allgenerará una salida solicitando una contraseña. Quiero esto en un 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). Estoy ejecutando Git Bash en Windows 8.1.

Jake
fuente
¿Encuentra una solución para git commit?
Nam Vu

Respuestas:

157

Si tu puedes hacer

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

en este caso, https://username:[email protected]/file.gitsustituir la origindegit push origin --all

Para ver más opciones de git push, intentegit help push

número 5
fuente
13
Tenga en cuenta que esto almacenará el nombre de usuario y la contraseña en texto sin formato en la configuración de git.
empuje el
4
en lugar de una contraseña simple, puede usar el hash de contraseña
Vasiliy Vanchuk
1
@VasiliyVanchuk ¿Qué tipo de hash usas? ¿Funciona esto para Github?
Raphi
14
¿Qué pasa si la contraseña contiene @?
Rahul Sharma
1
Se recomienda adjuntar la ruta completa con ' ', por ejemplo:git push 'https://username:[email protected]/file.git'
AlikElzin-kilaka
27

Usé el siguiente formato

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

y si su contraseña o nombre de usuario contiene @ reemplácelo con% 40

Hamidreza
fuente
Incluso puede usar WebUtility.UrlEncode (contraseña) para obtener ese% 40
iPradeep
para los usuarios de php use esto, urlencode($password)esto codificará todos los caracteres especiales no solo @.
shyammakwana.me
3

Según la documentación de Git , el último argumento del git pushcomando 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 repositoryparámetro puede ser una URL o un nombre remoto.

Por lo tanto, puede especificar el nombre de usuario y la contraseña de la misma manera que lo hace en su ejemplo de clonecomando.

Alexey Orlenko
fuente
2
Eso parece adecuado, pero cuando agrego el repositorio de git con el nombre de usuario y la contraseña como argumento, como en el ejemplo, todavía me solicita la contraseña.
Jake
3

Git no almacenará la contraseña cuando use URL como esa. En su lugar, solo almacenará el nombre de usuario, por lo que solo tendrá que solicitarle la contraseña la próxima vez. Como se explica en el manual , para almacenar la contraseña, debe utilizar un asistente de credenciales externo . Para Windows, puede usar Windows Credential Store para Git . Este ayudante también se incluye de forma predeterminada en GitHub para Windows .

Al usarlo, su contraseña se recordará automáticamente, por lo que solo debe ingresarla una vez. Entonces, cuando clone, se le pedirá su contraseña, y cada vez que se comunique con el control remoto, no volverá a solicitar su contraseña. En cambio, el asistente de credenciales proporcionará a Git la autenticación.

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

dar un toque
fuente
4
"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".
Marvin
@Marvin Soy consciente de ese comentario, sin embargo, no solo quería enviar una respuesta de dos oraciones, así que incluí información para otros usuarios que quizás no solo estén interesados ​​en conectarse a través de HTTPS.
empuje el
4
Sin embargo, todavía no responde a su pregunta.
Marvin
3

Es posible, pero, antes de git 2.9.3 (agosto de 2016), a git pushimprimiría la URL completa utilizada al retroceder al repositorio clonado.
¡Eso incluiría su nombre de usuario y contraseña!

Pero no más: consulte la confirmación 68f3c07 (20 de julio de 2016) y la confirmación 882d49c (14 de julio de 2016) de Jeff King ( peff) .
(Combinado por Junio ​​C Hamano - gitster- en el compromiso 71076e1 , 08 de agosto de 2016)

push: anonimizar URL en la salida de estado

Commit 47abd85 (fetch: quitar los nombres de usuario de las URL antes de almacenarlos, 2009-04-17, Git 1.6.4) enseñó a buscar para anonimizar las URL.
El propósito principal era evitar pegar contraseñas en los mensajes de combinación y confirmación, pero como efecto secundario, también evitamos imprimirlas en stderr.

El lado de envío no tiene el problema de combinación y confirmación, pero probablemente debería evitar imprimirlos en stderr . Podemos reutilizar la misma función de anonimato.

Tenga en cuenta que para que esto surja, las credenciales tendrían que aparecer en la línea de comando o en un archivo de configuración de git, ninguno de los cuales es particularmente seguro.
Por lo tanto, las personas deberían cambiar a usar ayudantes de credenciales, lo que hace que este problema desaparezca.

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

VonC
fuente
1

Para cualquiera que tenga problemas con las contraseñas con caracteres especiales, simplemente omita la contraseña y se la pedirá:

git push https://[email protected]/YOUR_GIT_USERNAME/yourGitFileName.git
Chris Adams
fuente