TLDR; Usa un file netrc crittografato con Git 1.8.3+ .
Il salvataggio di una password per un URL HTTPS del repository Git è possibile con ~/.netrc(Unix) o %HOME%/_netrc(notare _) su Windows.
Ma : quel file memorizzerebbe la tua password in testo semplice.
Soluzione : crittografa quel file con GPG (GNU Privacy Guard) e fai decodificare Git ogni volta che ha bisogno di una password (per push/ pull/ fetch/ cloneoperazione).
Nota: con Git 2.18 (Q2 2018), ora è possibile personalizzare il GPG utilizzato per decrittografare il .netrcfile crittografato .
Vedi commit 786ef50 , commit f07eeed (12 maggio 2018) di Luis Marsano (``) .
(Unita da Junio C Hamano - gitster- in commit 017b7c5 , 30 maggio 2018)
git-credential-netrc: accetta l' gpgopzione
git-credential-netrcè stato codificato per decrittografare con " gpg" indipendentemente dall'opzione gpg.program.
Questo è un problema su distribuzioni come Debian che chiamano GnuPG moderno qualcos'altro, come ' gpg2'
Istruzioni dettagliate per Windows
Con Windows:
(Git ha a gpg.exenella sua distribuzione, ma l'utilizzo di un'installazione GPG completa include a gpg-agent.exe, che memorizzerà la passphrase associata alla chiave GPG.)
Installa gpg4Win Lite, l'interfaccia minima della riga di comando di gnupg (prendi l' ultimagpg4win-vanilla-2.X.Y-betaZZ.exe ) e completa il tuo PERCORSO con la directory di installazione GPG:
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Nota il copycomando ' ': Git avrà bisogno di uno script Bash per eseguire il comando ' gpg'. Dato che gpg4win-vanilla-2viene fornito gpg2.exe, devi duplicarlo.)
(Assicurati di inserire una passphrase per quella chiave.)
Fidati di quella chiave
Installa lo script helper delle credenziali in una directory all'interno di %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
(Attenzione: lo script viene rinominato in Git 2.25.x / 2.26, vedi sotto)
(Sì, questo è uno script di Bash, ma funzionerà su Windows poiché verrà chiamato da Git.)
(Non dimenticare la ' protocol' parte: ' http' o ' https' a seconda dell'URL che utilizzerai.)
(Ora puoi eliminare il _netrcfile, mantenendo solo quello _netrc.gpgcrittografato.)
(Nota " /": C:\path\to...non funzionerebbe affatto.) (Puoi usare inizialmente -v -dper vedere cosa sta succedendo.)
D'ora in poi, qualsiasi comando Git che utilizza un URL HTTP (S) che richiede l'autenticazione decodificherà quel _netrc.gpgfile e utilizzerà il login / password associati al server che stai contattando. La prima volta, GPG ti chiederà la passphrase della tua chiave GPG, per decrittografare il file. Altre volte, l'agente gpg lanciato automaticamente dalla prima chiamata GPG fornirà quella passphrase per te.
In questo modo, è possibile memorizzare diversi URL / accessi / password in un file e archiviarlo sul disco crittografato.
Lo trovo più conveniente di un helper "cache", in cui è necessario ricordare e digitare (una volta per sessione) una password diversa per ciascuno dei servizi remoti, affinché tale password venga memorizzata nella cache.
Con Git 2.26 (Q1 2020), l'helper di credenziali di esempio per l'utilizzo .netrcè stato aggiornato per funzionare immediatamente. Vedi patch / discussione .
Vedi commit 6579d93 , commit 1c78c78 (20 dic 2019) di Denton Liu ( Denton-L) .
(Unita da Junio C Hamano - gitster- in commit 1fd27f8 , 25 dic 2019)
Firmato-fuori-da: Denton Liu
Il percorso shebang per l'interprete Perl git-credential-netrcera hardcoded.
Tuttavia, alcuni utenti potrebbero trovarlo in una posizione diversa e, quindi, avrebbero dovuto modificare manualmente lo script.
Aggiungi un .perlprefisso allo script per denotarlo come modello e ignora la versione generata.
Aumentare il Makefilemodo che esso genera git-credential-netrcda git-credential-netrc.perl, proprio come gli altri script Perl.
Le ricette di Makefile sono state sottratte senza vergogna contrib/mw-to-git/Makefile.
E:
Con 2.26 (Q1 2020), l'helper delle credenziali di esempio per l'utilizzo di .netrc è stato aggiornato per funzionare immediatamente.
Vedi commit 6579d93 , commit 1c78c78 (20 dic 2019) di Denton Liu ( Denton-L) .
(Unita da Junio C Hamano - gitster- in commit 1fd27f8 , 25 dic 2019)
Firmato-fuori-da: Denton Liu
Attualmente, git-credential-netrcnon funziona al di fuori di un repository git. Non riesce con il seguente errore:
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Tuttavia, non esiste alcun motivo reale per cui è necessario trovarsi all'interno di un repository. Gli helper delle credenziali dovrebbero essere in grado di funzionare anche all'esterno del repository.
Chiamare la versione non auto di in config()modo che git-credential-netrcnon debba più essere eseguito all'interno di un repository.
Jeff King ( peff) aggiunge:
Presumo che tu stia usando un gpg crittografato netrc(in caso contrario, probabilmente dovresti semplicemente usarlo credential-store).
Per l'accesso con password di sola lettura, trovo che la combinazione di passcon config come questa sia un po 'più bella:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"