Recentemente sono passato a sincronizzare i miei repository con https:// su GitHub (a causa di problemi di firewall), e chiede una password ogni volta.
C'è un modo per memorizzare nella cache le credenziali, invece di autenticarsi ogni volta che git push
?
Da Git 1.7.9 (rilasciato alla fine di gennaio 2012), c'è un meccanismo pulito in Git per evitare di dover digitare la password tutto il tempo per HTTP / HTTPS, chiamato credential helpers. (Grazie a dazonic per aver sottolineato questa nuova funzionalità nei commenti qui sotto).
Con Git 1.7.9 o successivo, puoi semplicemente usare uno dei seguenti aiutanti di credenziali:
git config --global credential.helper cache
... che dice a Git di tenere la tua password in memoria per (per default) 15 minuti. Puoi impostare un timeout più lungo con:
git config --global credential.helper "cache --timeout=3600"
(Questo esempio è stato suggerito nella pagina di aiuto di GitHub per Linux.) Puoi anche memorizzare le tue credenziali in modo permanente se lo desideri, vedi le altre risposte sotto.
La guida di GitHub suggerisce anche che se sei su Mac OS X e hai usato Homebrew per installare Git, puoi usare il keystore nativo di Mac OS X con:
git config --global credential.helper osxkeychain
Per Windows, c'è un aiuto chiamato Git Credential Manager for Windows o wincred in msysgit.
git config --global credential.helper wincred # obsolete
Con Git per Windows 2.7.3+ (marzo 2016):
git config --global credential.helper manager
Per Linux, puoi usare gnome-keyring
(o un'altra implementazione di keyring come KWallet).
Con versioni di Git precedenti alla 1.7.9, questa opzione più sicura non è disponibile, e dovrai cambiare l'URL che il tuo remoto origin
usa per includere la password in questo modo:
https://you:[email protected]/you/example.git
... in altre parole con :password
dopo il nome utente e prima di @
.
Puoi impostare un nuovo URL per il tuo origin
remoto con:
git config remote.origin.url https://you:[email protected]/you/example.git
Assicurati di usare https
, e dovresti essere consapevole che se lo fai, la tua password di GitHub sarà memorizzata in chiaro nella tua directory .git
, il che è ovviamente indesiderabile.
Un approccio alternativo è quello di mettere il tuo nome utente e la tua password nel tuo file ~/.netrc
, anche se, come per mantenere la password nell'URL remoto, questo significa che la tua password sarà memorizzata sul disco in chiaro ed è quindi meno sicuro e non raccomandato. Comunque, se vuoi adottare questo approccio, aggiungi la seguente linea al tuo ~/.netrc
:
machine <hostname> login <username> password <password>
... sostituendo <hostname>
con l'hostname del server, e <username>
e <password>
con il tuo username e password. Ricordatevi anche di impostare permessi di file system restrittivi su quel file:
chmod 600 ~/.netrc
Nota che su Windows, questo file dovrebbe essere chiamato _netrc
, e potrebbe essere necessario definire la variabile d'ambiente %HOME% - per maggiori dettagli vedi:
Potete anche fare in modo che Git memorizzi le vostre credenziali in modo permanente usando quanto segue:
git config credential.helper store
Nota: Mentre questo è conveniente, Git memorizzerà le tue credenziali in chiaro in un file locale (.git-credentials) sotto la directory del tuo progetto (vedi sotto per la directory "home"). Se non ti piace, cancella questo file e passa all'uso dell'opzione opzione cache.
Se vuoi che Git riprenda a chiederti le credenziali ogni volta che ha bisogno di connettersi al repository remoto, puoi eseguire questo comando:
git config --unset credential.helper
Per memorizzare le password in .git-credentials
nella tua directory %HOME%
invece che nella directory del progetto: usa il flag `--global
git config --global credential.helper store
Se non vuoi memorizzare la tua password in chiaro come ha detto Mark, puoi usare un URL GitHub diverso per il fetching rispetto a quello che usi per il pushing. Nel tuo file di configurazione, sotto [remote "origin"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Ti chiederà ancora una password quando fai il push, ma non quando fai il fetch, almeno per i progetti open source.