Taahhütleri zorlamak için GitHub kimlik bilgilerini önbelleğe almanın bir yolu var mı?


1867

Son zamanlarda GitHub'da (güvenlik duvarı sorunları nedeniyle) depolarımı https: // ile senkronize etmeye geçtim ve her seferinde bir şifre istiyor.

Her seferinde kimlik doğrulaması yapmak yerine kimlik bilgilerini önbelleğe almanın bir yolu var mı git push?



2
Artık kimlik bilgilerinizi _netrciçeren dosyayı şifrelemek için bir kimlik bilgisi yardımcısı kullanabilirsiniz . Bkz aşağıda Cevabımı . Ben daha güvenli buldum ki git-credential-winstore.exe(bellek önbellek) Windows biraz buggy.
VonC


git-credential-winstoreWindows için en iyisini çalıştı. Buggy nedir? Birkaç kez yapmamıza rağmen ssh'yi ayarlamak tercih edilen seçenektir, daha fazla hataya eğilimlidir ve bazen birden fazla ana bilgisayara bağlamanız gerektiğinde düz değildir.
Bron Davies

2
"SSH sertifikası" ile "SSH özel anahtarı" anlamına geldiğinizi varsayıyorum.
Michael Mior

Yanıtlar:


2369

Git sürüm 1.7.9 ve üstü ile

Git 1.7.9'dan beri (Ocak 2012'nin sonlarında piyasaya sürüldü), Git'te kimlik bilgisi yardımcıları adı verilen HTTP / HTTPS için parolanızı her zaman yazmak zorunda kalmamak için temiz bir mekanizma vardır . ( Aşağıdaki açıklamalarda bu yeni özelliğe dikkat çektiği için dazonic'e teşekkürler .)

Git 1.7.9 veya üstü ile aşağıdaki kimlik bilgisi yardımcılarından birini kullanabilirsiniz:

git config --global credential.helper cache

... Git'e şifrenizi bellekte 15 dakika (varsayılan olarak) saklamasını söyler. Aşağıdakilerle 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ştir .) İ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 aşağıdakilerle kullanabileceğinizi önerir :

git config --global credential.helper osxkeychain

Windows için Windows için Git Kimlik Bilgisi Yöneticisi adı verilen veya msysgit içinde wincred olan bir yardımcı vardır .

git config --global credential.helper wincred # obsolete

İle Windows için Git 2.7.3+ (2016 Mart):

git config --global credential.helper manager

Linux içingnome-keyring (veya KWallet gibi başka bir anahtarlık uygulaması) kullanabilirsiniz.

1.7.9'dan önceki Git sürümleriyle

Git'in 1.7.9'dan önceki sürümlerinde bu daha güvenli seçenek mevcut değildir ve originuzaktan kumandanızın kullandığı URL'yi bu şekilde eklemek için değiştirmeniz gerekir :

https://you:password@github.com/you/example.git

... başka bir deyişle :password, kullanıcı adından sonra ve @.

originUzaktan kumandanız için aşağıdakileri kullanarak yeni bir URL ayarlayabilirsiniz :

git config remote.origin.url https://you:password@github.com/you/example.git

Kullandığınızdan emin olun httpsve bunu yaparsanız GitHub şifrenizin .gitdizininizde düz metin olarak saklanacağını bilmelisiniz ki bu istenmeyen bir durumdur.

Herhangi bir Git sürümü ile (iyi, 0.99 sürümünden beri)

Alternatif bir yaklaşım, kullanıcı adınızı ve şifrenizi ~/.netrcdosyanıza koymaktır , ancak şifreyi uzak URL'de tutmak gibi, şifrenizin diskte düz metin olarak saklanacağı ve bu nedenle daha az güvenli olduğu ve önerilmediği anlamına gelir. Ancak, bu yaklaşımı benimsemek istiyorsanız, aşağıdaki satırı ekleyin ~/.netrc:

machine <hostname> login <username> password <password>

... yerine <hostname>sunucunun ana makine adıyla ve <username>ve <password>kullanıcı adınız ve şifrenizle. Ayrıca, o dosyada kısıtlayıcı dosya sistemi izinleri ayarlamayı unutmayın:

chmod 600 ~/.netrc

Windows'da bu dosyanın çağrılması gerektiğini _netrcve% HOME% ortam değişkenini tanımlamanız gerekebileceğini unutmayın - daha fazla ayrıntı için bkz:


72
Şifrenizi düz metin olarak saklamayın. Git 1.7.9'dan itibaren kimlik bilgisi yardımcılarını kullanabilirsiniz. git config --global credential.helper osxkeychainDiğer işletim sistemleri için bkz. help.github.com/articles/set-up-git
dazonic

6
FWIW, osx anahtarlık şeyler temel GIT kaynak kodunun bir parçasıdır, Brew veya MacPorts'un özel bir bileşeni veya ayın tadı ne olursa olsun. Ve git'i sıfırdan oluşturmanıza bile gerek yok - sadece cd katkıda / credential / osxkeychain / ve make komutunu çalıştırın.
synthesizerpatel

2
İki faktörlü kimlik doğrulama ile github'ın Kişi Erişim Jetonu dediği şeyi kullanmanız gerekir . Aslında her zaman bir tane kullanmalısınız, bir şifrenin aksine, hangi erişimi verdiğini kontrol edebilirsiniz. Sonuç olarak URL'deki şifreyi değiştirmeniz yeterlidir https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git. Diskte depolanan düz metin parolalarını kullanmak için neredeyse güvenli hale getirir.
Russell Stuart

12
git config --global credential.helper cacheWindows üzerinde çalışmıyor: stackoverflow.com/questions/11693074/… Windows'ta gitcredentialstore kullanın ve mutlu olun
Sebastian J.

8
Bu zaman aşımını sonsuza ayarlamak için herhangi bir yolu var mı?
sudo

720

Ayrıca Git'i aşağıdakileri kullanarak kimlik bilgilerinizi kalıcı olarak saklayabilirsiniz:

git config credential.helper store

Not: Bu uygun olsa da Git, kimlik bilgilerinizi proje dizininizin altındaki yerel bir dosyada (.git-kimlik bilgileri) açık metin olarak saklar ("ana" dizin için aşağıya bakın). Bunu beğenmediyseniz, bu dosyayı silin ve önbellek seçeneğini kullanarak geçiş yapın.

Git'in uzak depoya her bağlanması gerektiğinde kimlik bilgilerini sormaya devam etmesini istiyorsanız, bu komutu çalıştırabilirsiniz:

git config --unset credential.helper

Şifreleri saklamak için .git-credentialssizin de %HOME%proje dizinine aksine dizinde: kullanmak --globalbayrağı

git config --global credential.helper store

7
Windows'ta, Windows Creditial Store'daki GYTE şifre şifreli versiyonunu saklamak için bir yardımcı yarar yapılandırdığı şeyler indirebilirsiniz bkz confluence.atlassian.com/display/STASH/...
repor

76
--Global belirtmek zorunda olduğumu fark ettim ya da ayarları mevcut depoda saklamaya çalışacaktı:git config --global credential.helper store
Brian Gordon

6
Neden kalıcı depolamak yerine önbelleği yapsın ki? Bilgisayar falan mı paylaşıyorsunuz?
Michael J.Calkins

2
@BrianGordon Windows'ta GIT 1.9.5 kullanıyorum ve --globalbayrak gereksizdi. Bu bayrak olmasa bile, kimlik bilgileri dosyası %USER_HOME%dizinde oluşturuldu .
jFrenetic

2
düz metin olarak saklanmıyorsa ne ile korunur? Şifreniz? O zaman git'e bağlanırken sizden yönetici şifrenizi istemeniz gerekmez mi? Biraz garip bir şifre almak için şifre girmek zorunda değil misiniz?
Cruncher

101

TLDR; Git 1.8.3+ ile şifreli bir netrc dosyası kullanın .

Git veri havuzu HTTPS URL'si için bir şifre kaydetmek bir ~/.netrc(Unix) veya %HOME%/_netrc(_ , Windows'ta .

Ancak : Bu dosya şifrenizi düz metin olarak saklar.

Çözüm : Bu dosyayı GPG (GNU Privacy Guard) ile şifreleyin ve Git'in her parola gerektirdiğinde şifresini çözmesini sağlayın ( push/ pull/ fetch/ cloneişlemi için).


Not: Git 2.18 (Q2 2018) ile artık şifrelenmiş şifreyi çözmek için kullanılan GPG'yi özelleştirebilirsiniz .netrc dosyanın .

Bakınız Luis 784ef50 , f07eeed (12 Mayıs 2018) Luis Marsano (``) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 017b7c5 tamamlama 2018, 30 Mayıs)

git-credential-netrc: gpgseçeneği kabul et

git-credential-netrcgpggpg.program seçeneğinden bağımsız olarak ' ' ile şifresini çözmek zorlaştı.
Bu, Debian gibi modern GnuPG'yi başka bir şey olarak adlandıran dağıtımlarda bir sorundur ' gpg2'


Windows için Adım Adım talimatlar

Windows ile:

(Git gpg.exedağıtımında bir var, ancak tam bir GPG yüklemesi gpg-agent.exekullanmak, GPG anahtarınızla ilişkili parolanızı ezberleyecek bir a içerir .)

  • gpg4Win LiteMinimum gnupg komut satırı arabirimini yükleyin ( en songpg4win-vanilla-2.X.Y-betaZZ.exe sürümü alın ) ve PATH'nizi GPG kurulum diziniyle tamamlayın:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe

(' copy' Komutuna dikkat edin: Git'in komutu yürütmek için bir Bash betiğine ihtiyacı olacaktır gpg. ' ' gpg4win-vanilla-2İle birlikte gpg2.exe, bu yana , onu çoğaltmanız gerekir.)

  • Bir GPG anahtarı oluşturun veya alın ve ona güvenin:

    gpgp --import aKey
    # or
    gpg --gen-key

(Bu tuşa bir parola koyduğunuzdan emin olun.)

  • O anahtara güven

  • Kimlik bilgisi yardımcı komut dosyasını aşağıdakiler içindeki bir dizine yükleyin %PATH%:

    cd c:\a\fodler\in\your\path
    curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl

(Dikkat: komut dosyası Git 2.25.x / 2.26 olarak yeniden adlandırılmıştır, aşağıya bakın)

(Evet, bu bir Bash betiği, ancak Git tarafından çağrılacağı için Windows üzerinde çalışacak.)

  • Düz metinle _netrc dosyası oluşturma

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https

( Kullanacağınız URL'ye bağlı olarak ' protocol' bölüm: ' http' veya ' https' öğesini unutmayın.)

  • Bu dosyayı şifrele:

    gpg -e -r a_recipient _netrc

(Artık yapabilirsiniz silmek_netrc sadece tutarak dosyayı _netrc.gpgşifreli bir.)

  • Bu şifreli dosyayı kullanın:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"

(' /': C:\path\to...Hiç işe yaramaz.) ( -v -dNeler olup bittiğini görmek için önce kullanabilirsiniz .)

Şu andan itibaren, kimlik doğrulama gerektiren bir HTTP (S) URL'si kullanan herhangi bir Git komutu bu _netrc.gpgdosyanın şifresini çözecek ve iletişim kurduğunuz sunucuyla ilişkili oturum açma / parolayı kullanacaktır. İlk kez GPG, dosyanın şifresini çözmek için GPG anahtarınızın parolasını soracaktır. Diğer zamanlarda, ilk GPG çağrısı tarafından otomatik olarak başlatılan gpg aracısı sizin için bu parolayı sağlayacaktır.

Bu şekilde, birkaç URL'yi / girişi / şifreyi tek bir dosyada ezberleyebilir ve diskinizde depolanmasını sağlayabilirsiniz.
Söz konusu şifrenin bellekte önbelleğe alınması için, uzak servislerinizin her biri için (oturum başına bir kez) farklı bir şifre hatırlamanız ve yazmanız gereken bir "önbellek" yardımcısından daha uygun buluyorum.


Git 2.26 (Q1 2020) ile, kullanım için örnek kimlik yardımcısı .netrckutunun dışında çalışacak şekilde güncellendi. Bkz. Yama / tartışma .

Bkz. Taahhüt 6579d93 , taahhüt 1c78c78 (20 Aralık 2019) Denton Liu ( Denton-L) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 1fd27f8 tamamlama 2019 25 Ara)

contrib/credential/netrc: PERL_PATHyapılandırılabilir yap

İmzalayan: Denton Liu

Perl tercümanı için shebang yolu zor git-credential-netrckodlanmıştı.
Ancak, bazı kullanıcılar bu dosyayı farklı bir konuma yerleştirmiş olabilir ve bu nedenle betiği manuel olarak düzenlemek zorunda kalır.

.perlKomut dosyasına şablon olarak göstermek ve oluşturulan sürümü yok saymak için bir önek ekleyin .
Artırmak Makefileoluşturduğu, böylece git-credential-netrcgelen git-credential-netrc.perlsadece diğer Perl komut gibi.

Makefile tarifleri utanmadan çalındı contrib/mw-to-git/Makefile.

Ve:

2.26 (Q1 2020) ile .netrc kullanmak için örnek kimlik yardımcısı kutunun dışında çalışacak şekilde güncelleştirildi.

Bkz. Taahhüt 6579d93 , taahhüt 1c78c78 (20 Aralık 2019) Denton Liu ( Denton-L) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 1fd27f8 tamamlama 2019 25 Ara)

contrib/credential/netrc: bir repo dışında çalışmak

İmzalayan: Denton Liu

Şu anda git-credential-netrcgit deposunun dışında çalışmaz. Aşağıdaki hatayla başarısız olur:

fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.

Yine de bir havuzda olmanızın gerçek bir nedeni yoktur. Kimlik bilgisi yardımcıları, deponun dışında da iyi çalışabilmelidir.

Olmayan kendinden sürümünü Çağrı config()böylece git-credential-netrcartık ihtiyacı bir depo içinde çalıştırılmak üzere.

Jeff King ( peff) ekliyor:

Bir gpg şifreli kullandığınızı varsayıyorum netrc(eğer değilse, muhtemelen kullanmalısınız credential-store).
"Salt okunur" şifre erişimi için, passyapılandırma ile kombinasyonunu biraz daha güzel buluyorum :

[credential "https://github.com"]
  username = peff
  helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"

1
linux'da aynı şeyi denemek .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" .. ve "git: 'credential-netrc' değil bkz. 'git --help' "
güneşli

4
@sunny Bunun amacı curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrcşudur: Git'in arayabilmesi için yolunuzdaki git-credential-netrcherhangi bir yeri ( $PATH) kopyalamanız gerekir ' credential-netrc'.
VonC

Eh, _netrcbir benim için çalışmalar vermedi Windows 7PC, ama .netrcçalıştı youtube-dl ile --netrckendisine geçirilen argüman.
Iulian Onofrei

@VonC şu anki URL gibi görünüyor https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(yedi yıl sonra piping 😉)
Gwyneth Llewelyn

1
@GwynethLlewelyn Teşekkürler. Cevabı buna göre düzenledim. Başka eski bilgiler görürseniz kendiniz düzenlemekten çekinmeyin.
VonC

43

Kullanıcı kimlik bilgilerini bir HTTPS URL'sinde depolamanın kolay ve eski moda bir yolu vardır:

https://user:password@github.com/...

URL'yi ile değiştirebilirsiniz git remote set-url <remote-repo> <URL>

Bu yaklaşımın bariz dezavantajı, şifreyi düz metin olarak saklamanız gerektiğidir. Yine https://user@github.com/...de en azından güçlüğün yarısını kurtaracak olan kullanıcı adını ( ) girebilirsiniz .

SSH'ye geçmeyi veya GitHub istemci yazılımını kullanmayı tercih edebilirsiniz.


2
Kullanıcı adının / şifrenin kodlanması gerekebilir, bkz. Stackoverflow.com/a/34611311/3906760
MrTux

43

Bir kimlik bilgisi deposu kullanın.

Üzerinde Git 2,11 ± için OS X ve Linux , kullanım Git kimlik bilgileri deposunda yerleşik :

git config --global credential.helper libsecret

Windows'ta msysgit 1.7.9+ için :

git config --global credential.helper wincred

OS X'te Git 1.7.9+ için şunu kullanın:

git config --global credential.helper osxkeychain

2
Bu gitmek için yol olduğundan eminim, ama ne yazık ki bir hata alıyorum:git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
codepleb

1
Teşekkürler, ama bir şekilde aynı hatayı alıyorum. Yanlış bir şey mi yapıyorum? Komutu yazıyorum ve hiçbir şey olmuyor. En kısa sürede itmek, başarıyla eklediğim kimlik bilgileri istendi, ama hata alıyorum, bunu yaptıktan sonra bir git komutu değil.
codepleb

2
Libsecret'in Linux'ta çalışması için şu adımları izlemeniz gerekir: stackoverflow.com/a/40312117/775800
Lavamantis

1
Başka bir şey - Github'da 2FA etkinse, şifreniz çalışmaz. Ancak Github "Ayarlar" sayfanızda kişisel bir erişim belirteci oluşturabilirsiniz ve bu belirteç şifreniz olarak çalışır. github.com/github/hub/issues/822
Lavamantis

3
Güvenlik Sorunu: Windows kimlik bilgisi yöneticisi, düz metin parolanızı Windows hesabınıza giriş yapan herkes için erişilebilir hale getirir. Tek yapmaları gereken kimlik bilgisi yöneticisine bir istek göndermektir printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( daha fazla bilgi burada ). Bununla her zaman kişisel bir erişim belirteci kullanmalı ve elbette GitHub hesabınızda 2FA kullanmalısınız.
cjs


23

İlk önce yardımcıyı indirmem gerektiği hemen belli değildi! Atlassian'ın Git depolarıyla kalıcı olarak kimlik doğrulamasında credential.helper indirmesini buldum .

Alıntı:

Git'i OS X'te kimlik bilgileri önbellekleme ile kullanmak istiyorsanız şu adımları izleyin:

İkili git-credential-osxkeychain dosyasını indirin.

İkili programın yürütülebilir olduğundan emin olmak için aşağıdaki komutu çalıştırın:

chmod a+x git-credential-osxkeychain

Dizine koyun /usr/local/bin.

Aşağıdaki komutu çalıştırın:

git config --global credential.helper osxkeychain

23

Giriş kimlik bilgilerini URL'nin bir parçası olarak eklemeniz yeterlidir:

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

Not: Bu yöntemi önermiyorum, ancak acele ediyorsanız ve başka bir şey çalışmıyorsa, bu yöntemi kullanabilirsiniz.


12
E-posta kimliğinizde% 40 ile @ kaçmak zorunda kalacaksınız
Tarun Gupta

E-posta kimliğinde '+' varsa ne olur? Ben aynı kaçış denedim ama itme 'repo bulunamadı' dedi
killjoy


Parolayı düz metin olarak ve kolayca erişilebilir bir parolada saklamak en uygun çözüm olmayabilir.
aktiviteyi azaltma

20

GNU / Linux kurulumunda, ~ / .netrc de oldukça iyi çalışır:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Git'in HTTPS aktarımı için hangi ağ kitaplıklarını kullandığına bağlı olabilir .


4
Ayrıca emin olun chmod 0600 ~/.netrc.
poolie 31:13

Sadece burada Ubuntu netrc kılavuzuna bir bağlantı bırakmak istiyorum . Başka bir kullanıcı (/home/git/.netrc) için oluşturup daha sonra bu kullanıcıya sahipliğini değiştirmem gerekiyordu.
zacharydl

17

Windows için Git Kimlik Bilgisi Yöneticisi (GCM) eklentisini kullanabilirsiniz. Şu anda Microsoft tarafından sürdürülmektedir. Güzel olan şey, parolayı düz metin olarak değil, Windows Kimlik Bilgisi Deposu'na kaydetmesidir.

Projenin sürümler sayfasında bir yükleyici var . Bu, yerleşik kimlik bilgisi yöneticisi ile Windows için Git'in resmi sürümünü de yükler . GitHub (ve diğer sunucular) için iki faktörlü kimlik doğrulamaya izin verir . Başlangıçta oturum açmak için grafiksel bir arayüze sahiptir.

Cygwin kullanıcıları (veya zaten Windows için resmi Git'i kullanan kullanıcılar) için manuel yüklemeyi tercih edebilirsiniz. Zip paketini sürümler sayfasından indirin . Paketi ayıklayın ve install.cmddosyayı çalıştırın . Bu, ~/binklasörünüze yüklenir . ( ~/binDizinin PATH'nizde olduğundan emin olun .) Daha sonra bu komutu kullanarak dizini yapılandırın:

git config --global credential.helper manager

Git daha sonra git-credential-manager.exeherhangi bir sunucuda kimlik doğrulaması yapılırken çalıştırılır .


3
Hesabınıza giriş yapan herkesin şifrenin düz metnine kolay erişimi vardır. Tek yapmaları gereken kimlik bilgisi yöneticisine bir istek göndermektir printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( daha fazla bilgi burada ). Bununla her zaman kişisel bir erişim belirteci kullanmalı ve elbette GitHub hesabınızda 2FA kullanmalısınız.
cjs

13

Parolanızı Mark'ın söylediği gibi düz metin olarak saklamak istemiyorsanız, getirmek için itmek için olduğundan farklı bir GitHub URL'si kullanabilirsiniz. Yapılandırma dosyanızda [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

En azından açık kaynaklı projeler için, ittiğinizde yine de bir şifre isteyecektir, ancak getirdiğinizde değil.


12

OAuth

Kendi kişisel API jetonunuzu ( OAuth ) oluşturabilir ve normal kimlik bilgilerinizi kullandığınız şekilde kullanabilirsiniz (at:) /settings/tokens. Örneğin:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

Başka bir yöntem, kullanıcı adınızı / parolanızı ~/.netrc( _netrcWindows'ta),

machine github.com
login USERNAME
password PASSWORD

HTTPS için ekstra satırı ekleyin:

protocol https

Kimlik bilgisi yardımcısı

için Git daki GitHub şifreyi önbelleğe HTTPS kullanırken, kullanabileceğiniz bir kimlik bilgisi yardımcı senin GitHub kullanıcı adını ve şifreyi o GitHub'dan ile konuşur her zaman hatırlamak Git anlatmak için.

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helpergerekli),
  • Pencereler: git config --global credential.helper wincred
  • Linux ve diğerleri: git config --global credential.helper cache

İlişkili:


10

Kimlik bilgisi yardımcılarını kullanabilirsiniz.

git config --global credential.helper 'cache --timeout=x'

burada xsaniye sayısıdır.


7
Birkaç saniye ... Bazı dehalar milisaniye olarak güncelledi ve herkes kontrol etmeden onayladı. Cevabı bilmiyorsanız lütfen insanları yanıltmayın. Teşekkürler!
Charan

Eğer bir yerde bir bağlantı verebilir store, cachediğer ortak şeyler listelenir ve açıklanır ve?
Notinlist

3
Önce yönetici olarak 'önbellek' kullanmak için başka bir özel komut çağırmazsanız, bu jack bok gerçeğinden bahsetmek ister misiniz? Bu şeyler çok şifreli, tüm bu cevaplar eksik ve hiçbiri çalışmıyor. İnanılmaz derecede sinir bozucu. Bunun yerine şunu görün: stackoverflow.com/a/24800870/88409
Triynko

10

Havuzu klonladıktan sonra repo, repo/.git/configaşağıdaki gibi bazı yapılandırmaları düzenleyebilir ve ekleyebilirsiniz:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

Sonra için istenmez usernameve passwordtekrar.


Benim için çalışır helper = manager(ancak ilk push için kullanıcı adı + repo istenir).
Stéphane Laurent

helper = manager ile hata alıyorum kimlik bilgisi-manager git komutu değil
Kapil

Ne yazık ki git config dosyasındaki şifreyi yok sayar. credential.store ile .git_credentials tek seçenektir.
Avamander

9

Bunun güvenli bir çözüm olmadığını biliyorum, ancak bazen başka bir şey yüklemeden sadece basit bir çözüme ihtiyacınız var. Ve yardımcı = mağaza benim için çalışmadığı için, bir kukla yardımcı yarattım:

Bir komut dosyası oluşturun ve bunu, burada credfake adlı kullanıcı bin klasörünüze koyun , bu komut dosyası kullanıcı adınızı ve şifrenizi sağlayacaktır:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

çalıştırılabilir yap:

chmod u+x /home/mahuser/bin/credfake

sonra git'te yapılandırın:

git config --global credential.helper /home/mahuser/bin/credfake

(veya yalnızca bir repo için --global olmadan kullanın)

ve - voilá - git bu kullanıcı + şifresini kullanacaktır.


Katılıyorum. Gerçekten basit (güvenli değilse) çözüm. +1, ne yaptığınızı bildiğiniz sürece.
VonC

7

Hesap şifresi yerine bir kimlik doğrulama belirteci kullanılmalıdır. GitHub ayarlarına / uygulamalarına gidin ve ardından kişisel bir erişim belirteci oluşturun. Belirteç, aynı parola kullanılırken kullanılabilir.

Belirteç, kullanıcıların proje çalışması için hesap şifresini kullanmasına izin vermeyi amaçlamaktadır. Parolayı, yalnızca yeni jeton oluşturmak veya eski jetonları iptal etmek gibi yönetim işi yaparken kullanın.


Bir kullanıcıya GitHub hesabına tam erişim izni veren bir belirteç veya parola yerine, tek bir proje havuzuna erişim izni vermek için projeye özgü bir dağıtım anahtarı kullanılabilir. Bir Git projesi, normal kimlik bilgilerinizle diğer Git hesaplarına veya projelerine hala erişebileceğiniz aşağıdaki adımlarda bu farklı anahtarı kullanacak şekilde yapılandırılabilir:

  1. İçeren bir SSH yapılandırma dosyası yaz Host, IdentityFilebelki dağıtım anahtarının, için UserKnownHostsFile, ve belkiUser (bence olsa bunu gerekmez).
  2. Hemen hemen bir SSH sarıcı kabuk betiği yazın ssh -F /path/to/your/config $*
  3. Başına Ekle GIT_SSH=/path/to/your/wrapper normal Git komutu önünde. Burada git remote(orijin) git@github.com:user/project.gitformatı kullanmalıdır .

7

Güvenlik için kimlik bilgilerini kullanmak daha iyidir, ancak önbelleği kullanarak bir süre saklayabilirsiniz:

git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'

Kimlik bilgileriniz 3600 saniye boyunca kaydedilecektir.


3600 saniye sonra şifreyi tekrar girmek zorundayız ??? Kalıcı olarak nasıl kaydedilir?
HoangVu

$ git config credential.helper 'cache --timeout = 3600' hatası: yapılandırma dosyası kilitlenemedi .git / config: Böyle bir dosya veya dizin yok
PlantationGator

Bu işe yaradı: git config --global credential.helper 'önbellek --timeout = 3600'
PlantationGator

@Tama Üç yıl geçtiğini biliyorum, ama sadece dışarıda kalabilirsin --timeoutve kimlik bilgileri sonsuza kadar saklanacak.
Neil Chowdhury

Bu bir Docker kapsayıcısında çalışır (dayalı windowsservercore)?
Peter Mortensen

5

Benim gibi iki faktörlü kimlik doğrulamayı kullanıyorsanız işler biraz farklıdır . Başka bir yerde iyi bir cevap bulamadığım için, belki daha sonra bulabilmek için buraya bir tane yapıştıracağım.

İki öğeli kimlik doğrulaması kullanıyorsanız, kullanıcı adı / parola belirtmek işe yaramaz - erişiminiz reddedilir. Ancak bir uygulama erişim belirteci kullanabilir ve Git'in kimlik bilgisi yardımcısını kullanarak bunu önbelleğe alabilirsiniz. İlgili bağlantılar:

Bunu nerede gördüğümü hatırlamıyorum, ancak kullanıcı adınız istendiğinde, uygulama erişim kodunu yapıştırdığınız yer burasıdır. Ardından şifreyi boş bırakın. Mac bilgisayarımda çalıştı.


2 yönlü kimlik doğrulamayı kullanırken parola olarak "erişim belirteci" ni kullanırsınız. kullanıcı adı her zamanki gibi kalır
Ben Yitzhaki

4

Bu benim için çalışıyor Windows 10 kullanıyorum

git config --global credential.helper wincred

4

Genellikle uzak bir URL'niz vardır, bunun gibi bir şey,

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

Kullanırken kullanıcı adını ve şifreyi atlamak istiyorsanız şunu git pushdeneyin:

 git remote set-url origin https://username:password@gitlab.com/username/Repo.git

Aynı URL'yi (şifre dahil kullanıcı bilgileriyle birlikte) başlangıç ​​noktasına ekledim.

NOT: Kullanıcı adı bir e-posta kimliği ise çalışmaz.

git remote -v

origin    https://username:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)

3

Cevabımı gitcredentials'tan aldım (7) Manual Page . Benim durumumda, Windows kurulumumda kimlik önbelleği yok; Kimlik bilgisi deposu kullanıyorum.

Kimlik bilgisi deposunu kullandıktan sonra, kullanıcı adı / parola [kullanıcı klasörü] /. Git-credentials dosyasında saklanır. Kullanıcı adını / şifreyi kaldırmak için dosyanın içeriğini silmeniz yeterlidir.


2
Pencerelerinizde kimlik önbelleği yoksa, git config --global credential.helper wincredbu mağaza parolasını kalıcı olarak kullanmanızı öneririm .
Chetabahana

2

Besteci belgeleri GitHub API'sını kullanmasını engelleyebileceğinizden bahseder , böylece şöyle davranır git clone:

no-apiAnahtarı trueGitHub deposunda olarak ayarlarsanız, depo GitHub API'sini kullanmak yerine diğer Git havuzlarında olduğu gibi kopyalar. Ancak, gitsürücüyü doğrudan kullanmanın aksine , besteci yine de GitHub'ın zip dosyalarını kullanmaya çalışacaktır.

Böylece bölüm şöyle görünecektir:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

API'nın bir nedenden dolayı orada olduğunu unutmayın. Bu nedenle, bu, github.com'daki artan yük ile ilgili son çare yöntemi olmalıdır.


Bu cevabın orijinal soru ile ne ilgisi olduğundan emin değilim.
Charles Oppermann

2

Ayrıca bashrc dosyasını düzenler ve içine bir komut dosyası eklersiniz.

Bu, Git'i başlattığınızda bir kez şifrenizi ister ve oturumu kapatana kadar hatırlar.

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi

0

Kullanıyorsanız osxkeychain ve vardı bir şu adımları izleyin sona ve güncellemek istiyorsanız jetonu:

Terminalde çalıştırın, ardından iki kez enter tuşuna basın.

git credential-osxkeychain erase
 host=github.com
 protocol=https

Şimdi bir kullanıcı adı / şifre girmeniz istenecektir. Ancak bazen bu 'almaz' ve tekrar girmeye devam etmek gibi görünüyor.

Öyleyse, bilgisayarınızı yeniden başlatın . Şimdi bir sonraki git komutunu çalıştırıp kullanıcı adınızı / şifrenizi girdiğinizde kaydedilecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.