Neseniai pradėjau sinchronizuoti savo saugyklas su "GitHub" https:// (dėl ugniasienės problemų), ir kiekvieną kartą prašoma slaptažodžio.
Ar yra koks nors būdas talpinti slaptažodžius į talpyklą, užuot kiekvieną kartą autentifikavus git push
?
Nuo "Git 1.7.9" versijos (išleistos 2012 m. sausio mėn. pabaigoje) "Git" įdiegtas tvarkingas mechanizmas, vadinamas įgaliojimų pagalbininkais, leidžiantis išvengti nuolatinio slaptažodžio įvedimo HTTP / HTTPS. (Ačiū dazonic už tai, kad žemiau esančiuose komentaruose atkreipė dėmesį į šią naują funkciją.)
Naudodami "Git 1.7.9" ar naujesnę versiją, galite tiesiog naudoti vieną iš šių įgaliojimų pagalbininkų:
git config --global credential.helper cache
... kuris nurodo "Git" laikyti slaptažodį atmintyje (pagal nutylėjimą) 15 minučių. Galite nustatyti ilgesnį laiko tarpą naudodami:
git config --global credential.helper "cache --timeout=3600"
(Šis pavyzdys buvo pasiūlytas GitHub pagalbos puslapyje "Linux").) Taip pat, jei norite, galite nuolat saugoti savo prisijungimo duomenis, žr. kitus toliau pateiktus atsakymus.
GitHub pagalba taip pat siūlo, kad jei naudojate Mac OS X ir Git įdiegimui naudojote Homebrew, galite naudoti vietinę Mac OS X raktų saugyklą su:
git config --global credential.helper osxkeychain
Windows sistemai yra pagalbinė programa Git Credential Manager for Windows arba wincred in msysgit.
git config --global credential.helper wincred # obsolete
Su Git for Windows 2.7.3+ (2016 m. kovo mėn.):
git config --global credential.helper manager
Linux sistemoje galite naudoti gnome-keyring
(arba kitą raktų rinkinio realizaciją, pavyzdžiui, KWallet).
Naudojant "Git" versijas, ankstesnes nei 1.7.9, ši saugesnė parinktis nepasiekiama, todėl turėsite pakeisti URL adresą, kurį naudoja jūsų origin
remote, kad slaptažodis būtų įtrauktas tokiu būdu:
https://you:[email protected]/you/example.git
... kitaip tariant, po vartotojo vardo ir prieš @
įrašykite :password
.
Galite nustatyti naują nuotolinio pradžios
URL adresą, naudodami:
git config remote.origin.url https://you:[email protected]/you/example.git
Įsitikinkite, kad naudojate https
, ir turėtumėte žinoti, kad tokiu atveju jūsų "GitHub" slaptažodis bus saugomas atviru tekstu jūsų .git
kataloge, o tai akivaizdžiai nepageidautina.
Alternatyvus būdas - įrašyti savo vartotojo vardą ir slaptažodį į ~/.netrc
failą, nors, kaip ir laikant slaptažodį nutolusiame URL, tai reiškia, kad jūsų slaptažodis bus saugomas diske atviru tekstu, todėl yra mažiau saugus ir nerekomenduojamas. Tačiau jei norite taikyti šį metodą, į ~/.netrc
failą įrašykite šią eilutę:
machine <hostname> login <username> password <password>
... vietoj <hostname>
įrašykite serverio pagrindinį vardą, o <username>
ir <password>
- savo vartotojo vardą ir slaptažodį. Taip pat nepamirškite šiam failui nustatyti ribojančias failų sistemos teises:
chmod 600 ~/.netrc
Atkreipkite dėmesį, kad "Windows" sistemoje šis failas turėtų vadintis _netrc
ir jums gali tekti nustatyti aplinkos kintamąjį %HOME% - daugiau informacijos žr:
Taip pat galite nustatyti, kad "Git" nuolat saugotų jūsų įgaliojimus, naudodami šiuos veiksmus:
git config credential.helper store
Pastaba: Nors tai patogu, "Git" išsaugos jūsų įgaliojimus atviru tekstu vietiniame faile (.git-credentials), esančiame jūsų projekto kataloge (žr. toliau "home" katalogą). Jei jums tai nepatinka, ištrinkite šį failą ir naudokite talpyklos parinktį.
Jei norite, kad "Git" vėl neprašytų jūsų duomenų kiekvieną kartą, kai reikia prisijungti prie nutolusios saugyklos, galite paleisti šią komandą:
git config --unset credential.helper
Norėdami slaptažodžius saugoti .git-credentials
kataloge %HOME%
, o ne projekto kataloge: naudokite --global
vėliavėlę
git config --global credential.helper store
Jei nenorite saugoti slaptažodžio atviru tekstu, kaip sakė Markas, galite naudoti kitokį "GitHub" URL adresą, kad gautumėte duomenis, nei juos siunčiate. Konfigūracijos failo skiltyje [remote "origin"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Siunčiant vis tiek bus prašoma slaptažodžio, bet ne imant, bent jau atvirojo kodo projektams.