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
/ clone
operazione).
Nota: con Git 2.18 (Q2 2018), ora è possibile personalizzare il GPG utilizzato per decrittografare il .netrc
file 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' gpg
opzione
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.exe
nella 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 copy
comando ' ': Git avrà bisogno di uno script Bash per eseguire il comando ' gpg
'. Dato che gpg4win-vanilla-2
viene 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 _netrc
file, mantenendo solo quello _netrc.gpg
crittografato.)
(Nota " /
": C:\path\to...
non funzionerebbe affatto.) (Puoi usare inizialmente -v -d
per vedere cosa sta succedendo.)
D'ora in poi, qualsiasi comando Git che utilizza un URL HTTP (S) che richiede l'autenticazione decodificherà quel _netrc.gpg
file 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-netrc
era hardcoded.
Tuttavia, alcuni utenti potrebbero trovarlo in una posizione diversa e, quindi, avrebbero dovuto modificare manualmente lo script.
Aggiungi un .perl
prefisso allo script per denotarlo come modello e ignora la versione generata.
Aumentare il Makefile
modo che esso genera git-credential-netrc
da 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-netrc
non 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-netrc
non 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 pass
con 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"