Recientemente cambié la sincronización de mis repositorios a https:// en GitHub (debido a problemas con el firewall), y pide una contraseña cada vez.
Hay una manera de almacenar en caché las credenciales, en lugar de autenticar cada vez que git push
?
Desde Git 1.7.9 (lanzada a finales de enero de 2012), hay un mecanismo muy útil en Git para evitar tener que escribir tu contraseña todo el tiempo para HTTP / HTTPS, llamado ayudantes de credenciales. (Gracias a dazonic por señalar esta nueva característica en los comentarios de abajo).
Con Git 1.7.9 o posterior, sólo tienes que utilizar uno de los siguientes ayudantes de credenciales:
git config --global credential.helper cache
... que indica a Git que mantenga tu contraseña en la memoria durante (por defecto) 15 minutos. Puedes establecer un tiempo de espera más largo con:
git config --global credential.helper "cache --timeout=3600"
(Este ejemplo fue sugerido en la página de ayuda de GitHub para Linux.) También puedes almacenar tus credenciales permanentemente si así lo deseas, ver las otras respuestas más abajo.
La ayuda de GitHub también sugiere que si estás en Mac OS X y usaste Homebrew para instalar Git, puedes usar el almacén de claves nativo de Mac OS X con:
git config --global credential.helper osxkeychain
Para Windows, hay un ayudante llamado Git Credential Manager for Windows o wincred in msysgit.
git config --global credential.helper wincred # obsolete
Con Git para Windows 2.7.3+ (marzo de 2016):
git config --global credential.helper manager
Para Linux, puedes usar gnome-keyring
(u otra implementación de llavero como KWallet).
Con versiones de Git anteriores a la 1.7.9, esta opción más segura no está disponible, y tendrás que cambiar la URL que utiliza tu origin
remoto para incluir la contraseña de esta manera:
https://you:[email protected]/you/example.git
... en otras palabras con :password
después del nombre de usuario y antes de la @
.
Puede establecer una nueva URL para su origen
remoto con:
git config remote.origin.url https://you:[email protected]/you/example.git
Asegúrate de usar https
, y debes tener en cuenta que si haces esto, tu contraseña de GitHub se almacenará en texto plano en tu directorio .git
, lo que obviamente no es deseable.
Un enfoque alternativo es poner tu nombre de usuario y contraseña en tu archivo ~/.netrc
, aunque, al igual que mantener la contraseña en la URL remota, esto significa que tu contraseña se almacenará en el disco en texto plano y por lo tanto es menos seguro y no se recomienda. Sin embargo, si quieres adoptar este enfoque, añade la siguiente línea a tu ~/.netrc
:
machine <hostname> login <username> password <password>
... sustituyendo <nombre de host>
por el nombre de host del servidor, y <nombre de usuario>
y <contraseña>
por su nombre de usuario y contraseña. Recuerde también que debe establecer permisos restrictivos en el sistema de archivos:
chmod 600 ~/.netrc
Tenga en cuenta que en Windows, este archivo debe llamarse _netrc
, y es posible que tenga que definir la variable de entorno %HOME% - para más detalles ver:
También puedes hacer que Git almacene tus credenciales permanentemente usando lo siguiente:
git config credential.helper store
Nota: Aunque esto es conveniente, Git almacenará tus credenciales en texto claro en un archivo local (.git-credentials) bajo el directorio de tu proyecto (ver más abajo el directorio "home"). Si no te gusta esto, elimina este archivo y cambia a usar la opción opción de caché.
Si quieres que Git vuelva a pedirte las credenciales cada vez que necesite conectarse al repositorio remoto, puedes ejecutar este comando:
git config --unset credential.helper
Para almacenar las contraseñas en .git-credentials
en tu directorio %HOME%
en lugar de en el directorio del proyecto: utiliza la bandera `--global
git config --global credential.helper store
Si no quieres almacenar tu contraseña en texto plano como dijo Mark, puedes usar una URL de GitHub diferente a la que usas para enviar. En tu archivo de configuración, en [remote "origin"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Seguirá pidiendo una contraseña cuando empuje, pero no cuando recupere, al menos para los proyectos de código abierto.