como configurar nome de usuário e senhas para diferentes repositórios 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

Agora, quero colocar minhas credenciais git no github, gitlab e gitorious, para que, a cada vez, não seja necessário procurar as credenciais no navegador. Como isso pode ser feito para que seja automatizado?

Estou executando o zsh

shirish
fonte

Respostas:

19

Usando SSH

A abordagem comum para lidar com a autenticação git é delegá-la ao SSH. Normalmente, você define sua chave pública SSH no repositório remoto ( por exemplo, no GitHub ) e usa-a sempre que precisar se autenticar. É claro que você pode usar um agente-chave, manipulado pelo ambiente da área de trabalho ou manualmente com ssh-agente ssh-add.

Para evitar a necessidade de especificar o nome de usuário, você também pode configurá-lo no SSH, no ~/.ssh/config; por exemplo eu tenho

Host git.opendaylight.org
  User skitt

e então eu posso clonar usando

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

(observe a ausência de um nome de usuário).

Usando gitcredentials

Se a abordagem SSH não se aplicar ( por exemplo, você está usando um repositório acessado por HTTPS), o git tem sua própria maneira de lidar com credenciais, usando gitcredentials(e normalmente git-credential-store). Você especifica seu nome de usuário usando

git config credential.${remote}.username yourusername

e o auxiliar de credencial usando

git config credential.helper store

(especifique --globalse você deseja usar esta configuração em qualquer lugar).

Então, na primeira vez que você acessar um repositório, o git solicitará sua senha e ela será armazenada (por padrão, em ~/.git-credentials). Acessos subseqüentes ao repositório usarão a senha armazenada em vez de perguntar a você.

Stephen Kitt
fonte
1
você pode elaborar um pouco sobre credential.${remote} e credential.helper. Existe alguma documentação que você possa apontar, pois é a primeira vez que estou lendo sobre isso.
shirish
Vinculei às páginas de manual na minha resposta, essa é a documentação. ${remote}é a parte do protocolo e nome do host do URI que você deseja clonar, helperaponta para um programa auxiliar.
Stephen Kitt
1
Há também um capítulo do Pro Git sobre o assunto.
Stephen Kitt
6

Para aqueles que descobriram isso mais tarde - tive dificuldades com isso e finalmente o fiz funcionar

https / credentials.helper / Ubuntu

  1. Desativar globalmente:
    git config --global --unset credentials.helper
  2. Desativar localmente: (em cada repo) git config --unset credential.helper
  3. Crie um arquivo de credencial para cada repo: (dentro de cada repo)

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

Não estou dizendo que é o melhor ou o único, mas funcionou para mim depois de várias horas frustrantes.

SteveJ
fonte
parece ser semelhante ao que Stephen Kitt compartilhou acima.
Shirish
2
@ shirish não, na verdade, o terceiro ponto era o que eu precisava - opção para especificar onde os arquivos estão localizados.
Mārtiņš Briedis
@shirish; Além disso, as instruções de Kitts não especificam a definição das credenciais, que foi um componente crucial para mim, pois eu já as havia definido globalmente.
SteveJ
Eu também tive dificuldade com isso, pois não é como se todo o git fosse repos. você receberá seria da mesma fonte / loja. O segundo é melhor, mas muito mais frustrante para trabalhar na realidade. Ainda obrigado por compartilhar. @SteveJ
shirish