Yakın zamanda depolarımı GitHub'da https:// ile senkronize etmeye başladım (güvenlik duvarı sorunları nedeniyle) ve her seferinde bir şifre soruyor.
Her `git push' yapıldığında kimlik doğrulaması yapmak yerine kimlik bilgilerini önbelleğe almanın bir yolu var mı?
Git 1.7.9'dan beri (Ocak 2012'nin sonlarında yayınlandı), Git'te HTTP / HTTPS için her zaman şifrenizi yazmak zorunda kalmamak için credential helpers adı verilen düzgün bir mekanizma var. (Aşağıdaki yorumlarda bu yeni özelliğe dikkat çektiği için dazonic'e teşekkürler).
Git 1.7.9 veya sonraki sürümlerde, aşağıdaki kimlik bilgisi yardımcılarından birini kullanabilirsiniz:
git config --global credential.helper cache
... Git'e parolanızı (varsayılan olarak) 15 dakika boyunca bellekte tutmasını söyler. İle daha uzun bir zaman aşımı ayarlayabilirsiniz:
git config --global credential.helper "cache --timeout=3600"
(Bu örnek [Linux için GitHub yardım sayfasında] önerilmiştir3.) İsterseniz kimlik bilgilerinizi kalıcı olarak da saklayabilirsiniz, aşağıdaki diğer yanıtlara bakın.
GitHub'ın yardımı ayrıca Mac OS X kullanıyorsanız ve Git'i yüklemek için Homebrew kullandıysanız, yerel Mac OS X anahtar deposunu kullanabileceğinizi önermektedir:
git config --global credential.helper osxkeychain
Windows için Git Credential Manager for Windows veya wincred in msysgit adlı bir yardımcı vardır.
git config --global credential.helper wincred # obsolete
Windows için Git 2.7.3+]8 ile (Mart 2016):
git config --global credential.helper manager
Linux için gnome-keyring
](https://stackoverflow.com/questions/13385690/how-to-use-git-with-gnome-keyring-integration)(veya KWallet gibi başka bir keyring uygulaması) kullanabilirsiniz.
Git'in 1.7.9'dan önceki sürümlerinde bu daha güvenli seçenek mevcut değildir ve origin
remote'ınızın kullandığı URL'yi bu şekilde şifreyi içerecek şekilde değiştirmeniz gerekir:
https://you:[email protected]/you/example.git
... diğer bir deyişle :password
kullanıcı adından sonra ve @
dan önce gelir.
ile origin
remote'ınız için yeni bir URL ayarlayabilirsiniz:
git config remote.origin.url https://you:[email protected]/you/example.git
httpskullandığınızdan emin olun ve bunu yaparsanız, GitHub şifrenizin
.git` dizininizde düz metin olarak saklanacağını bilmelisiniz, ki bu kesinlikle istenmeyen bir durumdur.
Alternatif bir yaklaşım, kullanıcı adınızı ve parolanızı ~/.netrc
dosyanıza koymaktır, ancak parolayı uzak URL'de tutmak gibi, bu da parolanızın diskte düz metin olarak saklanacağı anlamına gelir ve bu nedenle daha az güvenlidir ve önerilmez. Ancak, bu yaklaşımı benimsemek istiyorsanız, ~/.netrc
dosyanıza aşağıdaki satırı ekleyin:
machine <hostname> login <username> password <password>
... <hostname>
yerine sunucunun ana bilgisayar adını, <username>
ve <password>
yerine de kullanıcı adınızı ve şifrenizi yazın. Ayrıca bu dosya üzerinde kısıtlayıcı dosya sistemi izinleri ayarlamayı unutmayın:
chmod 600 ~/.netrc
Windows'ta bu dosyanın _netrc
olarak adlandırılması gerektiğini ve %HOME% ortam değişkenini tanımlamanız gerekebileceğini unutmayın - daha fazla ayrıntı için bkz:
Ayrıca aşağıdakileri kullanarak Git'in kimlik bilgilerinizi kalıcı olarak saklamasını sağlayabilirsiniz:
git config credential.helper store
Not: Bu kullanışlı olsa da Git, kimlik bilgilerinizi açık metin olarak proje dizininizin altında yerel bir dosya (.git-credentials) oluşturun ("home" dizini için aşağıya bakın). Eğer bundan hoşlanmıyorsanız, bu dosyayı silin ve önbellek seçeneği.
Git'in her ihtiyaç duyduğunda sizden kimlik bilgilerinizi istemeye devam etmesini istiyorsanız uzak depoya bağlanmak için bu komutu çalıştırabilirsiniz:
git config --unset credential.helper
Şifreleri proje dizini yerine %HOME%
dizininizdeki .git-credentials
içinde saklamak için: --global
bayrağını kullanın
git config --global credential.helper store
Mark'ın dediği gibi şifrenizi düz metin olarak saklamak istemiyorsanız, almak için göndermek için kullandığınızdan farklı bir GitHub URL'si kullanabilirsiniz. Yapılandırma dosyanızda, [remote "origin"]
altında:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
En azından açık kaynak kodlu projeler için, ittiğinizde hala bir şifre soracaktır, ancak getirdiğinizde sormayacaktır.