Неотдавна преминах към синхронизиране на моите хранилища с https:// в GitHub (поради проблеми със защитната стена) и всеки път ми се иска парола.
Има ли начин да се кешират данните, вместо да се удостоверяват всеки път при git push
?
От версия 1.7.9 на Git (пусната в края на януари 2012 г.) в Git има чист механизъм, с който се избягва необходимостта да въвеждате паролата си през цялото време за HTTP/HTTPS, наречен credential helpers. (Благодаря на dazonic за посочването на тази нова функция в коментарите по-долу.)
С Git 1.7.9 или по-нова версия можете просто да използвате един от следните помощници за пълномощия:
git config --global credential.helper cache
... който указва на Git да съхранява паролата ви в кеш паметта за (по подразбиране) 15 минути. Можете да зададете по-дълъг срок с:
git config --global credential.helper "cache --timeout=3600"
(Този пример е предложен в помощната страница на GitHub за Linux).) Можете също така да съхранявате данните си постоянно, ако желаете, вижте другите отговори по-долу.
Помощта на GitHub също така предлага, че ако сте на Mac OS X и сте използвали Homebrew, за да инсталирате Git, можете да използвате родното Mac OS X хранилище на ключове с:
git config --global credential.helper osxkeychain
За Windows има помощно средство, наречено Git Credential Manager for Windows или wincred в msysgit.
git config --global credential.helper wincred # obsolete
С Git за Windows 2.7.3+ (март 2016 г.):
git config --global credential.helper manager
За Linux можете да използвате gnome-keyring
(или друга имплементация на ключодържател, например KWallet).
При версиите на Git преди 1.7.9 тази по-сигурна опция не е налична и ще трябва да промените URL адреса, който вашето отдалечено устройство origin
използва, за да включва паролата по този начин:
https://you:[email protected]/you/example.git
... с други думи, с :password
след потребителското име и преди @
.
Можете да зададете нов URL адрес за вашето отдалечено оригинал
с:
git config remote.origin.url https://you:[email protected]/you/example.git
Уверете се, че използвате https
, и трябва да знаете, че ако направите това, паролата ви за GitHub ще се съхранява в обикновен текст във вашата директория .git
, което очевидно е нежелателно.
Алтернативен подход е да поставите потребителското си име и парола във вашия файл ~/.netrc
, въпреки че, както и при запазването на паролата в отдалечения URL адрес, това означава, че паролата ви ще се съхранява на диска в обикновен текст и следователно е по-малко сигурно и не се препоръчва. Въпреки това, ако искате да приложите този подход, добавете следния ред към вашия ~/.netrc
:
machine <hostname> login <username> password <password>
... като замените <hostname>
с името на хоста на сървъра'и <username>
и <password>
с вашето потребителско име и парола. Също така не забравяйте да зададете ограничителни права на файловата система за този файл:
chmod 600 ~/.netrc
Обърнете внимание, че в Windows този файл трябва да се нарича _netrc
и може да се наложи да зададете променливата на средата %HOME% - за повече подробности вижте:
Можете също така да наредите на Git да съхранява вашите идентификационни данни постоянно, като използвате следното:
git config credential.helper store
Забележка: Въпреки че това е удобно, Git ще съхранява вашите пълномощия в чист текст в локален файл (.git-credentials) в директорията на вашия проект (вижте по-долу за директорията "home"). Ако това не ви харесва, изтрийте този файл и преминете към използване на cache.
Ако искате Git да се откаже да ви пита за идентификационни данни всеки път, когато се наложи да се свърже с отдалеченото хранилище, можете да изпълните тази команда:
git config --unset credential.helper
За да съхранявате паролите в .git-credentials
във вашата директория %HOME%
, а не в директорията на проекта: използвайте флага --global
git config --global credential.helper store
Ако не искате да съхранявате паролата си в обикновен текст, както каза Марк, можете да използвате различен URL адрес на GitHub за извличане, отколкото за изпращане. В конфигурационния си файл, под [remote "origin"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Все още ще се изисква парола, когато изпращате, но не и когато извличате, поне за проекти с отворен код.