Eu recentemente mudei para sincronizar meus repositórios para https:// no GitHub (devido a problemas de firewall), e ele pede uma senha toda vez.
Existe uma forma de guardar as credenciais, em vez de as autenticar sempre que se "empurra"?
Desde Git 1.7.9 (lançado no final de janeiro de 2012), há um mecanismo limpo em Git para evitar ter que digitar sua senha o tempo todo para HTTP / HTTPS, chamado helpers credenciais. (Obrigado a dazonic por apontar esta nova funcionalidade nos comentários abaixo).
Com Git 1.7.9 ou posterior, você pode usar apenas um dos seguintes ajudantes de credenciais:
git config --global credential.helper cache
... que diz a Git para manter sua senha armazenada na memória por (por padrão) 15 minutos. Você pode definir um timeout mais longo com:
git config --global credential.helper "cache --timeout=3600"
(Esse exemplo foi sugerido na página de ajuda do GitHub para Linux.) Você também pode armazenar suas credenciais permanentemente se assim desejar, veja as outras respostas abaixo.
GitHub's ajuda também sugere que se você're no Mac OS X e usou Homebrew para instalar Git, você pode usar o nativo Mac OS X keystore com:
git config --global credential.helper osxkeychain
Para Windows, existe um ajudante chamado Git Credential Manager for Windows ou wincred in msysgit.
git config --global credential.helper wincred # obsolete
Com Git para Windows 2.7.3+ (Março 2016):
git config --global credential.helper manager
Para Linux, você pode utilizar gnome-keyring
(ou outra implementação de chaveiro como o KWallet).
Com versões do Git antes da 1.7.9, esta opção mais segura não está disponível, e você'precisará alterar a URL que seu origin
remoto utiliza para incluir a senha desta forma:
https://you:[email protected]/you/example.git
... em outras palavras com :password
depois do nome de usuário e antes do @
.
Você pode definir um novo URL para o seu controle remoto "de origem" com:
git config remote.origin.url https://you:[email protected]/you/example.git
Certifique-se de utilizar https
, e você deve estar ciente de que se você fizer isso, sua senha do GitHub será armazenada em texto claro no seu diretório .git
, o que é obviamente indesejável.
Uma abordagem alternativa é colocar seu nome de usuário e senha em seu arquivo ~/.netrc
, embora, como manter a senha na URL remota, isso significa que sua senha será armazenada no disco em texto simples e, portanto, é menos segura e não recomendada. No entanto, se você quiser adotar esta abordagem, adicione a seguinte linha ao seu arquivo ~/.netrc
:
machine <hostname> login <username> password <password>
... substituindo <hostname>
pelo servidor's hostname, e <username>
e <password>
pelo seu username e password. Lembre-se também de definir permissões restritivas para o sistema de arquivos nesse arquivo:
chmod 600 ~/.netrc
Note que no Windows, este arquivo deve ser chamado _netrc
, e você pode precisar definir a variável de ambiente %HOME% - para mais detalhes veja:
Você também pode ter Git armazenar suas credenciais permanentemente usando o seguinte:
git config credential.helper store
Nota: Embora isto seja conveniente, Git irá armazenar suas credenciais em texto claro em um arquivo local (.git-credentials) sob o diretório do seu projeto (veja abaixo o "home" diretório). Se você não't gosta disto, apague este arquivo e mude para usar o diretório opção de cache.
Se você quiser que Git retome a pedir-lhe credenciais cada vez que precisar de conecte ao repositório remoto, você pode executar este comando:
git config --unset credential.helper
Para armazenar as senhas em .git-credentials' no seu diretório
%HOME%' ao invés do diretório do projeto: utilize a bandeira `--global'.
git config --global credential.helper store
Se você não'não quer armazenar sua senha em texto simples como Mark disse, você pode usar uma URL GitHub diferente para buscar do que para empurrar. No seu arquivo de configuração, em [remote "origin"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Ele ainda pedirá uma senha quando você pressionar, mas não quando você pegar, pelo menos para projetos de código aberto.