C'è un modo per memorizzare nella cache le credenziali di GitHub per il push dei commit?


1867

Di recente sono passato alla sincronizzazione dei miei repository su https: // su GitHub (a causa di problemi con il firewall) e mi chiede sempre una password.

C'è un modo per memorizzare nella cache le credenziali, invece di autenticarsi ogni volta git push?



2
Ora puoi utilizzare un supporto credenziali per crittografare il _netrcfile contenente le tue credenziali. Vedi la mia risposta qui sotto . Ho trovato più sicuro che la git-credential-winstore.exe(cache di memoria) che è un po 'buggy su Windows.
VonC,


git-credential-winstoreha funzionato al meglio per Windows. Che cosa è buggy? Configurare ssh è l'opzione preferita, anche se l'ho fatto più volte, è molto più soggetto a errori e talvolta semplicemente non funziona quando devi connetterti a più host.
Bron Davies,

2
Con "certificato SSH" presumo che intendi "chiave privata SSH".
Michael Mior,

Risposte:


2369

Con Git versione 1.7.9 e successive

Da Git 1.7.9 (rilasciato alla fine di gennaio 2012), esiste un meccanismo preciso in Git per evitare di dover digitare sempre la password per HTTP / HTTPS, chiamati helper delle credenziali . (Grazie a dazonic per aver sottolineato questa nuova funzione nei commenti qui sotto.)

Con Git 1.7.9 o successivo, puoi semplicemente usare uno dei seguenti helper di credenziali:

git config --global credential.helper cache

... che dice a Git di mantenere la password memorizzata nella cache per (per impostazione predefinita) 15 minuti. È possibile 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 .) Se lo desideri, puoi anche memorizzare le tue credenziali in modo permanente, vedi le altre risposte di seguito.

L'aiuto 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, esiste un aiutante chiamato Git Credential Manager per 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 usaregnome-keyring (o altre implementazioni di portachiavi come KWallet).

Con versioni Git precedenti all'1.7.9

Con le versioni di Git precedenti alla 1.7.9, questa opzione più sicura non è disponibile e dovrai modificare l'URL utilizzato dal tuo origintelecomando per includere la password in questo modo:

https://you:password@github.com/you/example.git

... in altre parole con :passworddopo il nome utente e prima del @.

Puoi impostare un nuovo URL per il tuo origintelecomando con:

git config remote.origin.url https://you:password@github.com/you/example.git

Assicurati di usare httpse dovresti essere consapevole che se lo fai, la tua password GitHub sarà memorizzata in chiaro nella tua .gitdirectory, il che è ovviamente indesiderabile.

Con qualsiasi versione di Git (bene, dalla versione 0.99)

Un approccio alternativo è quello di inserire il nome utente e la password nel ~/.netrcfile, sebbene, come nel mantenere la password nell'URL remoto, ciò significhi che la password verrà archiviata sul disco in testo semplice, quindi meno sicura e sconsigliata. Tuttavia, se si desidera adottare questo approccio, aggiungere la seguente riga al proprio ~/.netrc:

machine <hostname> login <username> password <password>

... sostituendo <hostname>con il nome host del server <username>e <password>con nome utente e password. Ricorda inoltre di impostare autorizzazioni restrittive per il file system su quel file:

chmod 600 ~/.netrc

Si noti che su Windows, questo file dovrebbe essere chiamato _netrce potrebbe essere necessario definire la variabile di ambiente% HOME% - per maggiori dettagli consultare:


72
Non memorizzare la password in testo semplice. A partire da Git 1.7.9 è possibile utilizzare gli helper delle credenziali. git config --global credential.helper osxkeychainsu OS X. Per altri SO vedi help.github.com/articles/set-up-git
dazonic

6
FWIW, la roba portachiavi osx fa parte del codice sorgente GIT di base, non è un componente esclusivo di Brew o MacPorts o qualunque sia il sapore del mese. E non hai nemmeno bisogno di compilare git da zero - solo cd contrib / credential / osxkeychain / ed esegui make.
synthesizerpatel

2
Con l'autenticazione a due fattori devi usare ciò che github chiama un token di accesso alla persona . In effetti dovresti sempre usarne uno, poiché a differenza di una password puoi controllare quale accesso fornisce. Basta sostituire la password nell'URL in modo da finire https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git. Rende le password in chiaro memorizzate sul disco quasi abbastanza sicure da usare.
Russell Stuart,

12
git config --global credential.helper cachenon funziona su Windows: stackoverflow.com/questions/11693074/... uso gitcredentialstore su Windows un essere felice
Sebastian J.

8
Un modo per impostare questo timeout su infinito?
sudo,

720

Puoi anche fare in modo che Git memorizzi le tue credenziali in modo permanente usando quanto segue:

git config credential.helper store

Nota: sebbene sia conveniente, Git memorizzerà le tue credenziali in chiaro in un file locale (.git-credentials) nella directory del tuo progetto (vedi sotto per la directory "home"). Se non ti piace, elimina questo file e passa all'opzione cache.

Se vuoi che Git riprenda a chiederti le credenziali ogni volta che deve connettersi al repository remoto, puoi eseguire questo comando:

git config --unset credential.helper

Per memorizzare le password nella .git-credentialstua %HOME%directory anziché nella directory del progetto: usa il --globalflag

git config --global credential.helper store

7
Su Windows, è possibile scaricare un'utilità di supporto che configura le cose per archiviare una versione crittografata della password GIT nell'archivio crediti di Windows, vedere confluence.atlassian.com/display/STASH/…
Contango

76
Ho scoperto che dovevo specificare --global o che avrebbe cercato di memorizzare le impostazioni nell'archivio corrente:git config --global credential.helper store
Brian Gordon,

6
Perché la cache dovrebbe invece essere archiviata in modo permanente? Condividere computer o qualcosa del genere?
Michael J. Calkins,

2
@BrianGordon Sto usando GIT 1.9.5 su Windows e il --globalflag era ridondante. Anche senza questo flag, il file delle credenziali è stato creato nella %USER_HOME%directory.
jFrenetic,

2
se non viene archiviato in testo normale, con cosa è protetto? La tua password? Non dovrebbe quindi chiederti la tua password di amministratore quando ti connetti a git? Non è necessario inserire una password per ottenere un'altra password un po 'strana?
Cruncher

101

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.)

  • Crea o importa una chiave GPG e fidati:

    gpgp --import aKey
    # or
    gpg --gen-key

(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.)

  • Crea un file _netrc in chiaro

    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

(Non dimenticare la ' protocol' parte: ' http' o ' https' a seconda dell'URL che utilizzerai.)

  • Crittografa quel file:

    gpg -e -r a_recipient _netrc

(Ora puoi eliminare il _netrcfile, mantenendo solo quello _netrc.gpgcrittografato.)

  • Usa quel file crittografato:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"

(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)

contrib/credential/netrc: rende PERL_PATHconfigurabile

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)

contrib/credential/netrc: lavoro al di fuori di un repository

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"

1
provare la stessa cosa su linux .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" ..e ottengo "git: 'credential-netrc' non è un comando git. vedi 'git --help' "
soleggiato

4
@sunny Ecco a cosa curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrcserve: devi copiare git-credential-netrcovunque nel tuo percorso ( $PATH), affinché git sia in grado di chiamare ' credential-netrc'.
VonC

Bene, il _netrcnon ha funzionato per me su un Windows 7PC, ma ha .netrcfunzionato per youtube-dl con l' --netrcargomento passato ad esso.
Iulian Onofrei,

@VonC sembra che l'URL corrente https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(tubazioni tra sette anni dopo 😉)
Gwyneth Llewelyn

1
@GwynethLlewelyn Grazie. Ho modificato la risposta di conseguenza. Non esitare a modificarlo tu stesso se vedi altre informazioni obsolete.
VonC

43

Esiste un modo semplice e vecchio stile per archiviare le credenziali dell'utente in un URL HTTPS:

https://user:password@github.com/...

Puoi cambiare l'URL con git remote set-url <remote-repo> <URL>

L'ovvio aspetto negativo di questo approccio è che è necessario memorizzare la password in testo semplice. Puoi ancora inserire il nome utente ( https://user@github.com/...) che ti farà risparmiare almeno metà del fastidio.

Potresti preferire passare a SSH o utilizzare il software client GitHub.


2
Il nome utente / password potrebbe aver bisogno di essere codificati, vedere stackoverflow.com/a/34611311/3906760
MrTux

43

Utilizzare un archivio di credenziali.

Per Git 2.11+ su OS X e Linux , utilizzare l'archivio credenziali incorporato di Git :

git config --global credential.helper libsecret

Per msysgit 1.7.9+ su Windows :

git config --global credential.helper wincred

Per Git 1.7.9+ su OS X utilizzare:

git config --global credential.helper osxkeychain

2
Sono sicuro che questa è la strada da percorrere, ma purtroppo ricevo un errore:git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
codepleb

1
Grazie, ma ho lo stesso errore in qualche modo. Sto facendo qualcosa di sbagliato? Digito il comando e non succede nulla. Non appena spingo, mi vengono chieste le credenziali, che inserisco correttamente, ma ricevo l'errore, che dopo averlo fatto non è un comando git.
codepleb,

2
Prima libsecret funziona su Linux, è necessario procedere come segue: stackoverflow.com/a/40312117/775800
Lavamantis

1
Un'altra cosa: se hai abilitato 2FA su Github, la tua password non funzionerà. Ma puoi creare un token di accesso personale nella pagina "Impostazioni" di Github e quel token funziona come password. github.com/github/hub/issues/822
Lavamantis,

3
Problema di sicurezza: il gestore delle credenziali di Windows rende la password in chiaro accessibile a chiunque abbia effettuato l'accesso al proprio account Windows. Tutto quello che devono fare è inviare una richiesta al gestore delle credenziali come printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( maggiori dettagli qui ). Dovresti sempre usare un token di accesso personale con questo, e ovviamente usare 2FA sul tuo account GitHub.
cjs,

40

Puoi solo usare

git config credential.helper store

La prossima volta che inserisci la password con pull o push, questa verrà archiviata nel file .git-credentials come testo normale (un po 'non sicuro, ma inseriscilo in una cartella protetta).

E questo è tutto, come indicato in questa pagina:

git-credential-store


3
Per Git per Windows 2.7.3 (marzo 2016): github.com/git-for-windows/git/releases?after=v2.8.4.windows.1 , sarebbe git config credential.helper managerinvece
VonC

23

Non fu immediatamente ovvio per me che dovevo prima scaricare l'helper! Ho trovato il download credential.helper presso Atlassian's Autenticazione permanente con i repository Git .

Citazione:

Seguire questi passaggi se si desidera utilizzare Git con la memorizzazione nella cache delle credenziali su OS X:

Scarica la binaria git-credential-osxkeychain.

Eseguire il comando seguente per assicurarsi che il file binario sia eseguibile:

chmod a+x git-credential-osxkeychain

Mettilo nella directory /usr/local/bin .

Esegui il comando seguente:

git config --global credential.helper osxkeychain

23

Includi semplicemente le credenziali di accesso come parte dell'URL:

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

Nota: non consiglio questo metodo, ma se sei di fretta e nient'altro funziona, puoi usare questo metodo.


12
funzionerà devi scappare @ con% 40 nel tuo ID email
Tarun Gupta,

Cosa succede se abbiamo un '+' nell'ID e-mail? Ho provato la stessa fuga ma la spinta ha detto 'repo not found'
killjoy

4
hanno% 2B invece di +
Tarun Gupta

Memorizzare la password in testo semplice e facilmente accessibile potrebbe non essere la soluzione ottimale.
riduzione dell'attività

20

Su una configurazione GNU / Linux, un ~ / .netrc funziona anche abbastanza bene:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Potrebbe dipendere dalle librerie di rete utilizzate da Git per il trasporto HTTPS .


4
Assicurati anche di chmod 0600 ~/.netrc.
poolie

Voglio solo lasciare un link qui alla manpage di Ubuntu netrc . Ho dovuto crearlo per un altro utente (/home/git/.netrc), quindi cambiare la proprietà per quell'utente.
Zacharydl,

17

Per Windows è possibile utilizzare Git Credential Manager plug-in (GCM). Attualmente è gestito da Microsoft. La cosa bella è che salva la password nell'archivio credenziali di Windows, non come testo normale.

C'è un programma di installazione nella pagina delle versioni del progetto. Questo installerà anche la versione ufficiale di Git per Windows con il gestore delle credenziali integrato. Consente l' autenticazione a due fattori per GitHub (e altri server). E ha un'interfaccia grafica per l'accesso iniziale.

Per gli utenti Cygwin (o utenti che già utilizzano Git ufficiale per Windows), potresti preferire l'installazione manuale. Scarica il pacchetto zip dalla pagina dei rilasci . Estrarre il pacchetto e quindi eseguire il install.cmdfile. Questo verrà installato nella tua ~/bincartella. (Assicurati che la tua ~/bindirectory sia nel tuo PERCORSO.) Quindi configurala usando questo comando:

git config --global credential.helper manager

Git eseguirà quindi il processo di git-credential-manager.exeautenticazione su qualsiasi server.


3
Chiunque abbia effettuato l'accesso al tuo account ha un facile accesso al testo in chiaro della password. Tutto quello che devono fare è inviare una richiesta al gestore delle credenziali come printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( maggiori dettagli qui ). Dovresti sempre usare un token di accesso personale con questo, e ovviamente usare 2FA sul tuo account GitHub.
cjs,

13

Se non si desidera memorizzare la password in testo normale come ha detto Mark, è possibile utilizzare un URL GitHub diverso per il recupero di quello che si fa per il push. Nel tuo file di configurazione, sotto [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

Chiederà comunque una password quando si preme, ma non quando si recupera, almeno per i progetti open source.


12

OAuth

Puoi creare il tuo token API personale ( OAuth ) e utilizzarlo nello stesso modo in cui utilizzeresti le tue normali credenziali (su:) /settings/tokens. Per esempio:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

Un altro metodo è configurare il tuo utente / password in ~/.netrc( _netrcsu Windows), ad es

machine github.com
login USERNAME
password PASSWORD

Per HTTPS, aggiungi la riga aggiuntiva:

protocol https

Un aiuto credenziale

Per memorizzare nella cache la password di GitHub in Git quando si utilizza HTTPS, è possibile utilizzare un supporto credenziale per dire a Git di ricordare il nome utente e la password di GitHub ogni volta che parla con GitHub.

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helperrichiesto),
  • Finestre: git config --global credential.helper wincred
  • Linux e altri: git config --global credential.helper cache

Relazionato:


10

È possibile utilizzare gli helper delle credenziali.

git config --global credential.helper 'cache --timeout=x'

dove xè il numero di secondi.


7
È il numero di secondi ... Alcuni geni lo hanno aggiornato in millisecondi e tutti lo hanno approvato senza controllare. Per favore, non indurre in errore le persone se non si conosce la risposta. Grazie!
Charan,

Si può dare un link ad un luogo in cui store, cachee altre cose comuni sono elencate e spiegate?
Notinlist

3
Ti interessa menzionare il fatto che questo fa merda a meno che tu non chiami un altro comando specifico per usare prima la 'cache' come gestore? Questa roba è così criptica, tutte queste risposte sono incomplete e nessuna di esse funziona. Incredibilmente frustrante. Vedere questo, invece: stackoverflow.com/a/24800870/88409
Triynko

10

Dopo aver clonato il repository repo, è possibile modificare repo/.git/confige aggiungere alcune configurazioni come di seguito:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

Quindi non ti verrà chiesto usernamee di passwordnuovo.


Funziona per me con helper = manager(ma mi viene chiesto nome utente + repository per la prima push).
Stéphane Laurent,

con helper = manager Ricevo l'errore credential-manager non è un comando git
Kapil

Sfortunatamente git ignora la password nel file di configurazione. .git_credentials con credential.store è l'unica opzione.
Avamandro

9

So che questa non è una soluzione sicura, ma a volte è necessaria solo una soluzione semplice, senza installare altro. E poiché helper = store non ha funzionato per me, ho creato un aiutante fittizio:

Crea uno script e inseriscilo nella cartella bin degli utenti, qui denominata credfake , questo script fornirà il tuo nome utente e la tua password:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

renderlo eseguibile:

chmod u+x /home/mahuser/bin/credfake

quindi configuralo in git:

git config --global credential.helper /home/mahuser/bin/credfake

(o usalo senza --global per il solo repository)

e - voilá - git utilizzerà questo utente + password.


Sono d'accordo. Soluzione semplice (se non sicura). +1, a condizione che tu sappia cosa stai facendo.
VonC,

7

È necessario utilizzare un token di autenticazione anziché la password dell'account. Vai su Impostazioni / applicazioni GitHub e quindi crea un token di accesso personale. Il token può essere utilizzato allo stesso modo in cui viene utilizzata una password.

Il token ha lo scopo di consentire agli utenti di non utilizzare la password dell'account per il lavoro di progetto. Usa la password solo quando lavori di amministrazione, come la creazione di nuovi token o la revoca di vecchi token.


Invece di un token o una password che garantisce a un utente l'accesso completo a un account GitHub, è possibile utilizzare una chiave di distribuzione specifica del progetto per concedere l'accesso a un singolo repository di progetti. Un progetto Git può essere configurato per utilizzare questa chiave diversa nei seguenti passaggi quando è ancora possibile accedere ad altri account o progetti Git con le proprie credenziali normali:

  1. Scrivi un file di configurazione SSH che contiene Host, IdentityFileper la chiave di distribuzione, forse il UserKnownHostsFile, e forse il User(anche se penso che non ti serva).
  2. Scrivi uno script shell wrapper SSH che sia virtualmente ssh -F /path/to/your/config $*
  3. Preparati GIT_SSH=/path/to/your/wrapperdi fronte al tuo normale comando Git. Qui git remote(origine) deve utilizzare il git@github.com:user/project.gitformato.

7

È meglio utilizzare le credenziali per la sicurezza, ma è possibile conservarle per un po 'di tempo utilizzando la cache:

git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'

Le tue credenziali verranno salvate per 3600 secondi.


Significa che dopo 3600 secondi, dobbiamo inserire nuovamente la password ??? Come salvarli permanentemente?
HoangVu,

$ git config credential.helper Errore "cache --timeout = 3600": impossibile bloccare il file di configurazione .git / config: nessun file o directory di questo tipo
PlantationGator

Funzionava: git config --global credential.helper 'cache --timeout = 3600'
PlantationGator

@Tama So che sono passati tre anni, ma puoi semplicemente lasciar perdere --timeoute le credenziali saranno conservate per sempre.
Neil Chowdhury,

Funzionerà all'interno di un contenitore Docker (basato su windowsservercore)?
Peter Mortensen,

5

Le cose sono leggermente diverse se si utilizza l' autenticazione a due fattori come me. Dal momento che non ho trovato una buona risposta altrove, ne inserirò una qui in modo che forse la possa trovare in seguito.

Se stai utilizzando l'autenticazione a due fattori, specificare il nome utente / la password non funzionerà nemmeno: l'accesso verrà negato. Ma puoi usare un token di accesso all'applicazione e utilizzare l'helper delle credenziali di Git per memorizzarlo nella cache. Ecco i link pertinenti:

E non ricordo dove l'ho visto, ma quando mi viene chiesto il nome utente, è lì che si attacca il token di accesso all'applicazione. Quindi lasciare vuota la password. Ha funzionato sul mio Mac.


quando si utilizza l'autenticazione a 2 vie, si utilizza il "token di accesso" come password. lo username rimane lo stesso di sempre
Ben Yitzhaki,

4

Questo funziona per me sto usando Windows 10

git config --global credential.helper wincred

4

Di solito hai un URL remoto, qualcosa del genere,

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

Se si desidera saltare il nome utente e la password durante l'utilizzo git push, provare questo:

 git remote set-url origin https://username:password@gitlab.com/username/Repo.git

Ho appena aggiunto lo stesso URL (con i dettagli dell'utente inclusa la password) a origin.

NOTA: non funziona se il nome utente è un ID e-mail.

git remote -v

origin    https://username:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)

3

Ho ricevuto la mia risposta dalla pagina di manuale di gitcredentials (7) . Nel mio caso, non ho la cache delle credenziali nella mia installazione di Windows; Uso l'archivio credenziali.

Dopo aver usato credential-store, il nome utente / la password sono memorizzati nel file [cartella utente] /. Git-credentials. Per rimuovere il nome utente / password, basta eliminare il contenuto del file.


2
Quando non hai la cache delle credenziali in Windows, ti suggerisco di utilizzare git config --global credential.helper wincredquesta password in modo permanente.
Chetabahana,

2

La documentazione del compositore menziona che puoi impedirgli di usare l'API GitHub, in modo che si comporti come git clone:

Se si imposta la no-apichiave truesu un repository GitHub, clonerà il repository come farebbe con qualsiasi altro repository Git invece di utilizzare l'API GitHub. Ma a differenza dell'utilizzo gitdiretto del driver, il compositore tenterà comunque di utilizzare i file zip di GitHub.

Quindi la sezione sarebbe simile a questa:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

Tieni presente che l'API è lì per un motivo. Quindi questo dovrebbe essere un metodo di ultima istanza per quanto riguarda l'aumento del carico su github.com.


Non sono sicuro di cosa abbia a che fare questa risposta con la domanda originale.
Charles Oppermann,

2

È inoltre possibile modificare il file bashrc e aggiungere uno script in esso.

Ciò richiederebbe una volta la password all'avvio di Git e poi la ricorderà fino alla disconnessione.

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi

0

Se stai usando osxkeychain e il token è scaduto e si desidera aggiornarlo, attenersi alla seguente procedura:

Corri nel terminale, quindi premi due volte Invio.

git credential-osxkeychain erase
 host=github.com
 protocol=https

Ora dovresti ricevere un nome utente / password. Tuttavia a volte sembra che questo non "accetti" e devi continuare a rientrare.

In tal caso, riavvia il computer . Ora la prossima volta che esegui un comando git e inserisci il tuo nome utente / password, verrà salvato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.