Ik ben onlangs overgestapt op het synchroniseren van mijn repositories naar https:// op GitHub (vanwege firewall problemen), en het vraagt iedere keer om een wachtwoord.
Is er een manier om de inloggegevens te cachen, in plaats van elke keer dat git push
te authenticeren?
Sinds Git 1.7.9 (uitgebracht eind januari 2012), is er een handig mechanisme in Git om te voorkomen dat je de hele tijd je wachtwoord moet intypen voor HTTP / HTTPS, genaamd credential helpers. (Met dank aan dazonic voor het wijzen op deze nieuwe functie in de commentaren hieronder).
Met Git 1.7.9 of later, kun je gewoon een van de volgende credential helpers gebruiken:
git config --global credential.helper cache
... die Git vertelt om je wachtwoord in de cache in het geheugen te bewaren gedurende (standaard) 15 minuten. Je kunt een langere timeout instellen met:
git config --global credential.helper "cache --timeout=3600"
(Dat voorbeeld werd gesuggereerd in de GitHub hulppagina voor Linux.) Je kunt je inloggegevens ook permanent opslaan als je dat wilt, zie de andere antwoorden hieronder.
GitHub's hulp suggereert ook dat als je op Mac OS X zit en Homebrew gebruikt hebt om Git te installeren, je de native Mac OS X sleutelbewaarplaats kunt gebruiken met:
git config --global credential.helper osxkeychain
Voor Windows is er een helper genaamd Git Credential Manager for Windows of wincred in msysgit.
git config --global credential.helper wincred # obsolete
Met Git voor Windows 2.7.3+ (maart 2016):
git config --global credential.helper manager
Voor Linux, kun je gebruik maken van gnome-keyring
(of een andere keyring implementatie zoals KWallet).
Met versies van Git voor 1.7.9, is deze veiligere optie niet beschikbaar, en zul je de URL die je origin
remote gebruikt moeten veranderen om het wachtwoord op deze manier te gebruiken:
https://you:[email protected]/you/example.git
... met andere woorden met :password
na de gebruikersnaam en voor de @
.
Je kunt een nieuwe URL voor je origin
remote instellen met:
git config remote.origin.url https://you:[email protected]/you/example.git
Zorg ervoor dat je https
gebruikt, en je moet je ervan bewust zijn dat als je dit doet, je GitHub wachtwoord in platte tekst in je .git
directory zal worden opgeslagen, wat natuurlijk ongewenst is.
Een alternatieve aanpak is om je gebruikersnaam en wachtwoord in je ~/.netrc
bestand te zetten, hoewel, net als bij het bewaren van het wachtwoord in de remote URL, dit betekent dat je wachtwoord in platte tekst op de schijf zal worden opgeslagen en dus minder veilig is en niet aan te raden. Echter, als u deze aanpak wilt volgen, voeg dan de volgende regel toe aan uw ~/.netrc
:
machine <hostname> login <username> password <password>
... en vervang <hostname>
door de hostnaam van de server, en <username>
en <password>
door je gebruikersnaam en wachtwoord. Vergeet ook niet om beperkende bestandssysteem permissies op dat bestand in te stellen:
chmod 600 ~/.netrc
Merk op dat op Windows, dit bestand _netrc
moet heten, en dat je misschien de %HOME% omgevingsvariabele moet instellen - voor meer details zie:
Je kunt Git ook je referenties permanent laten opslaan met het volgende:
git config credential.helper store
Opmerking: Hoewel dit handig is, zal Git je referenties in duidelijke tekst opslaan in een lokaal bestand (.git-credentials) onder je projectmap (zie hieronder voor de "home" map). Als je dit niet leuk vindt, verwijder dit bestand dan en schakel over op het gebruik van de cache optie.
Als je wilt dat Git je weer om referenties vraagt iedere keer als het moet verbinding moet maken met het remote repository, dan kun je dit commando uitvoeren:
git config --unset credential.helper
Om de wachtwoorden in .git-credentials
in je %HOME%
directory op te slaan in plaats van in de project directory: gebruik de --global
vlag
git config --global credential.helper store
Als je je wachtwoord niet in platte tekst wilt opslaan zoals Mark zei, kun je een andere GitHub URL gebruiken voor het ophalen dan je doet voor het pushen. In je configuratie bestand, onder [remote "origin"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Het zal nog steeds om een wachtwoord vragen als je pusht, maar niet als je fetched, in ieder geval voor open source projecten.