¿Cómo configurar el nombre de usuario y las contraseñas para diferentes repositorios git?

17
─[$] cat ~/.gitconfig

[user]
    name = Shirish Agarwal
    email = [email protected]
[core]
    editor = leafpad
    excludesfiles = /home/shirish/.gitignore
    gitproxy = \"ssh\" for gitorious.org
[merge]
    tool = meld
[push]
    default = simple
[color]
    ui = true
    status = auto
    branch = auto

Ahora quiero poner mis credenciales de git para github, gitlab y gitorious para que cada vez no tenga que buscar las credenciales en el navegador. ¿Cómo se puede hacer esto para que sea automatizado?

Estoy corriendo zsh

shirish
fuente

Respuestas:

21

Usando SSH

El enfoque común para manejar la autenticación git es delegarlo a SSH. Por lo general, configura su clave pública SSH en el repositorio remoto ( por ejemplo, en GitHub ), y luego la usa siempre que necesita autenticarse. Por supuesto, puede utilizar un agente clave, ya sea manejado por su entorno de escritorio o manualmente con ssh-agenty ssh-add.

Para evitar tener que especificar el nombre de usuario, también puede configurarlo en SSH, en ~/.ssh/config; por ejemplo tengo

Host git.opendaylight.org
  User skitt

y luego puedo clonar usando

git clone ssh://git.opendaylight.org:29418/aaa

(tenga en cuenta la ausencia de un nombre de usuario allí).

Utilizando gitcredentials

Si el enfoque SSH no se aplica ( por ejemplo , está utilizando un repositorio al que se accede a través de HTTPS), git tiene su propia forma de manejar las credenciales, utilizando gitcredentials(y típicamente git-credential-store). Usted especifica su nombre de usuario usando

git config credential.${remote}.username yourusername

y el ayudante de credenciales usando

git config credential.helper store

(especifique --globalsi desea utilizar esta configuración en todas partes).

Luego, la primera vez que accede a un repositorio, git le pedirá su contraseña y se almacenará (de forma predeterminada ~/.git-credentials). Los accesos posteriores al repositorio utilizarán la contraseña almacenada en lugar de preguntarle.

Stephen Kitt
fuente
1
¿Puedes elaborar un poco sobre credential.${remote} y credential.helper. ¿Hay alguna documentación que pueda señalar ya que esta es la primera vez que estoy leyendo al respecto?
Shirish
Me vinculé a las páginas de manual en mi respuesta, esa es la documentación. ${remote}es la parte de protocolo y nombre de host del URI que desea clonar, helperapunta a un programa auxiliar.
Stephen Kitt
1
También hay un capítulo de Pro Git sobre el tema.
Stephen Kitt
7

Para aquellos que encuentren esto más tarde, tuve dificultades con esto y finalmente lo hice funcionar

https / credentials.helper / Ubuntu

  1. Desarmado globalmente:
    git config --global --unset credentials.helper
  2. Desarmar localmente: (en cada repositorio) git config --unset credential.helper
  3. Cree un archivo de credenciales para cada repositorio: (dentro de cada repositorio)

    git config credential.helper 'store --file ~/.git_reponame_credentials'
    

No digo que sea la mejor o la única forma, pero funcionó para mí después de varias horas frustrantes.

SteveJ
fuente
parece ser similar a lo que Stephen Kitt compartió anteriormente.
Shirish
2
@shirish no realmente, el tercer punto era el que necesitaba: opción para especificar dónde se encuentran los archivos.
Mārtiņš Briedis
@shirish; Además, las instrucciones de Kitts no especifican que no se establezcan las credenciales, lo cual fue un componente crucial para mí ya que ya las había configurado globalmente.
SteveJ
También tuve dificultades con esto, ya que no es como si todos los repositorios de git. Obtendrá sería de la misma fuente / tienda. El segundo es mejor pero mucho más frustrante para trabajar en la realidad. Aún así, gracias por compartir. @SteveJ
shirish el