Jeg har for nylig skiftet til at synkronisere mine repositories til https:// på GitHub (på grund af firewallproblemer), og den beder om en adgangskode hver gang.
Er der en måde at cache legitimationsoplysningerne på, i stedet for at autentificere hver gang at git push
?
Siden Git 1.7.9 (udgivet i slutningen af januar 2012) har Git en fin mekanisme til at undgå at skulle skrive din adgangskode hele tiden for HTTP/HTTPS, kaldet credential helpers. (Tak til dazonic for at gøre opmærksom på denne nye funktion i kommentarerne nedenfor.)
Med Git 1.7.9 eller nyere kan du bare bruge en af følgende credential helpers:
git config --global credential.helper cache
... som fortæller Git at holde din adgangskode gemt i hukommelsen i (som standard) 15 minutter. Du kan indstille en længere timeout med:
git config --global credential.helper "cache --timeout=3600"
(Dette eksempel blev foreslået i GitHub-hjælpssiden for Linux.) Du kan også gemme dine legitimationsoplysninger permanent, hvis du ønsker det, se de andre svar nedenfor.
GitHub's hjælp foreslår også, at hvis du'er på Mac OS X og har brugt Homebrew til at installere Git, kan du bruge den native Mac OS X keystore med:
git config --global credential.helper osxkeychain
Til Windows er der en hjælper kaldet Git Credential Manager for Windows eller wincred i msysgit.
git config --global credential.helper wincred # obsolete
Med Git for Windows 2.7.3+ (marts 2016):
git config --global credential.helper manager
For Linux kan du bruge gnome-keyring
(eller en anden keyring-implementering som KWallet).
Med Git-versioner før 1.7.9 er denne mere sikre mulighed ikke tilgængelig, og du skal ændre den URL, som din origin
-fjernbetjening bruger, så den inkluderer adgangskoden på denne måde:
https://you:[email protected]/you/example.git
... med andre ord med :password
efter brugernavnet og før @
.
Du kan indstille en ny URL for din origin
fjernbetjening med:
git config remote.origin.url https://you:[email protected]/you/example.git
Sørg for at bruge https
, og du skal være opmærksom på, at hvis du gør dette, vil din GitHub-adgangskode blive gemt i klartekst i din .git
-mappe, hvilket naturligvis ikke er ønskeligt.
En alternativ fremgangsmåde er at lægge dit brugernavn og din adgangskode i din ~/.netrc
-fil, selv om dette, ligesom med at gemme adgangskoden i fjern-URL'en, betyder, at din adgangskode vil blive gemt på disken i klartekst, og er derfor mindre sikkert og ikke anbefalelsesværdigt. Men hvis du ønsker at benytte denne fremgangsmåde, skal du tilføje følgende linje til din ~/.netrc
:
machine <hostname> login <username> password <password>
... hvor du erstatter <hostname>
med serverens hostnavn, og <username>
og <password>
med dit brugernavn og password. Husk også at indstille restriktive filsystemtilladelser til denne fil:
chmod 600 ~/.netrc
Bemærk, at på Windows skal denne fil hedde _netrc
, og du skal muligvis definere miljøvariablen %HOME% - for flere detaljer se:
Du kan også få Git til at gemme dine legitimationsoplysninger permanent ved at bruge følgende:
git config credential.helper store
Bemærk: Selvom dette er praktisk, vil Git gemme dine legitimationsoplysninger i klar tekst i en lokal fil (.git-credentials) under din projektmappe (se nedenfor for "home" mappen). Hvis du ikke bryder dig om dette, skal du slette denne fil og skifte til at bruge cache-indstillingen.
Hvis du vil have Git til at fortsætte med at bede dig om legitimationsoplysninger hver gang det skal forbinde til det eksterne repository, kan du køre denne kommando:
git config --unset credential.helper
For at gemme adgangskoderne i .git-credentials
i din %HOME%
mappe i modsætning til projektmappen: brug --global
flaget
git config --global credential.helper store
Hvis du ikke ønsker at gemme din adgangskode i klartekst, som Mark sagde, kan du bruge en anden GitHub-URL til hentning end til pushing. I din konfigurationsfil, under [remote "origin"]]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Den vil stadig bede om en adgangskode, når du skubber, men ikke når du henter, i det mindste for open source-projekter.