TLDR; Use um arquivo netrc criptografado com o Git 1.8.3+ .
É possível salvar uma senha para um URL HTTPS do repositório Git com um ~/.netrc(Unix) ou %HOME%/_netrc(observe o _) no Windows.
Mas : esse arquivo armazenaria sua senha em texto simples.
Solução : Criptografe esse arquivo com GPG (GNU Privacy Guard) e faça com que o Git descriptografe-o sempre que precisar de uma senha (para push/ pull/ fetch/ cloneoperação).
Nota: com o Git 2.18 (Q2 2018), agora você pode personalizar o GPG usado para descriptografar o arquivo criptografado. .netrc arquivo .
Consulte commit 786ef50 , commit f07eeed (12 de maio de 2018) por Luis Marsano (``) .
(Mesclado por Junio C Hamano - gitster- na confirmação 017b7c5 , 30 de maio de 2018)
git-credential-netrc: gpgopção de aceitação
git-credential-netrcfoi codificado para descriptografar com " gpg", independentemente da opção gpg.program.
Este é um problema em distribuições como o Debian que chamam o GnuPG moderno de outra coisa, como ' gpg2'
Instruções passo a passo para Windows
Com o Windows:
(O Git tem a gpg.exeem sua distribuição, mas o uso de uma instalação completa do GPG inclui a gpg-agent.exe, que memoriza sua frase secreta associada à sua chave GPG.)
Instale gpg4Win Lite, a interface mínima da linha de comandos do gnupg (pegue a mais recentegpg4win-vanilla-2.X.Y-betaZZ.exe ) e complete o seu PATH com o diretório de instalação do GPG:
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Observe o copycomando ' ': Git precisará de um script Bash para executar o comando ' gpg'. Como gpg4win-vanilla-2vem com ele gpg2.exe, é necessário duplicá-lo.)
(Certifique-se de inserir uma senha para essa chave.)
Confie nessa chave
Instale o script auxiliar de credencial em um diretório dentro de %PATH%:
cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(Cuidado: o script é renomeado no Git 2.25.x / 2.26, veja abaixo)
(Sim, esse é um script do Bash, mas funcionará no Windows, pois será chamado pelo Git.)
Crie um arquivo _netrc em texto não criptografado
machine a_server.corp.com
login a_login
password a_password
protocol https
machine a_server2.corp.com
login a_login2
password a_password2
protocol https
(Não esqueça a protocolparte ' ': ' http' ou ' https' dependendo do URL que você usará.)
(Agora você pode excluir o _netrcarquivo, mantendo apenas o arquivo _netrc.gpgcriptografado.)
(Observe que ' /': C:\path\to...não funcionaria de jeito nenhum.) (Você pode usar primeiro-v -d para ver o que está acontecendo.)
A partir de agora, qualquer comando Git que use uma URL HTTP (S) que exija autenticação descriptografará esse _netrc.gpgarquivo e usará o login / senha associado ao servidor que você está entrando em contato. Na primeira vez, o GPG solicitará a senha da sua chave GPG para descriptografar o arquivo. Outras vezes, o gpg-agent iniciado automaticamente pela primeira chamada de GPG fornecerá essa senha para você.
Dessa forma, você pode memorizar vários URLs / logins / senhas em um arquivo e armazená-los no seu disco criptografado.
Acho mais conveniente do que um auxiliar de "cache", onde você precisa se lembrar e digitar (uma vez por sessão) uma senha diferente para cada um dos seus serviços remotos, para que a senha seja armazenada em cache na memória.
Com o Git 2.26 (primeiro trimestre de 2020), o auxiliar de credencial de amostra para uso .netrcfoi atualizado para funcionar imediatamente. Veja patch / discussão .
Consulte commit 6579d93 , commit 1c78c78 (20 dez 2019) por Denton Liu ( Denton-L) .
(Incorporado por Junio C Hamano - gitster- in commit 1fd27f8 , 25 dez 2019)
Assinado por: Denton Liu
O caminho shebang para o intérprete Perl git-credential-netrcfoi codificado.
No entanto, alguns usuários podem tê-lo localizado em um local diferente e, portanto, teriam que editar manualmente o script.
Inclua um .perlprefixo no script para denotá-lo como um modelo e ignore a versão gerada.
Aumentar o Makefilepara que ele gera a git-credential-netrcpartir degit-credential-netrc.perl , assim como outros scripts Perl.
As receitas Makefile foram descaradamente roubadas contrib/mw-to-git/Makefile.
E:
Com 2.26 (Q1 2020), o auxiliar de credencial de amostra para usar .netrc foi atualizado para funcionar de maneira imediata.
Consulte commit 6579d93 , commit 1c78c78 (20 dez 2019) por Denton Liu ( Denton-L) .
(Incorporado por Junio C Hamano - gitster- in commit 1fd27f8 , 25 dez 2019)
Assinado por: Denton Liu
Atualmente, git-credential-netrcnão funciona fora de um repositório git. Falha com o seguinte erro:
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Porém, não há nenhuma razão real para estar dentro de um repositório. Os auxiliares de credenciais também devem funcionar bem fora do repositório.
Chame a versão não auto config()para que git-credential-netrcnão precise mais ser executada em um repositório.
Jeff King ( peff) acrescenta:
Eu suponho que você esteja usando um gpg criptografado netrc(se não, provavelmente deveria usar credential-store).
Para acesso à senha "somente leitura", acho que a combinação de passcom config é um pouco melhor:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"