Czy istnieje sposób buforowania referencji GitHub do wypychania zatwierdzeń?


1867

Niedawno przełączyłem się na synchronizację moich repozytoriów z https: // w GitHub (z powodu problemów z zaporą) i za każdym razem prosi o hasło.

Czy istnieje sposób buforowania poświadczeń zamiast uwierzytelniania za każdym razem git push?



2
Możesz teraz użyć pomocnika poświadczeń do zaszyfrowania _netrcpliku zawierającego twoje poświadczenia. Zobacz moją odpowiedź poniżej . Uważam, że bezpieczniej jest git-credential-winstore.exe(pamięć podręczna), która jest nieco wadliwa w systemie Windows.
VCC


git-credential-winstoredziałało najlepiej dla systemu Windows. Co jest buggy Konfigurowanie ssh jest preferowaną opcją, chociaż zrobiłem to już kilka razy, jest jednak bardziej podatne na błędy i czasami po prostu nie działa, gdy musisz połączyć się z wieloma hostami.
Bron Davies,

2
Przez „certyfikat SSH” zakładam, że masz na myśli „klucz prywatny SSH”.
Michael Mior

Odpowiedzi:


2369

W wersji Git 1.7.9 i nowszych

Od wersji Git 1.7.9 (wydanej pod koniec stycznia 2012 r.) W Git znajduje się fajny mechanizm pozwalający uniknąć konieczności ciągłego wpisywania hasła do HTTP / HTTPS, zwanych pomocnikami poświadczeń . (Dzięki dazonic za wskazanie tej nowej funkcji w komentarzach poniżej).

W Git 1.7.9 lub nowszym możesz po prostu użyć jednego z następujących pomocników poświadczeń:

git config --global credential.helper cache

... co każe Gitowi przechowywać twoje hasło w pamięci podręcznej przez (domyślnie) 15 minut. Możesz ustawić dłuższy limit czasu za pomocą:

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

(Ten przykład został zasugerowany na stronie pomocy GitHub dla systemu Linux ). Możesz również przechowywać swoje poświadczenia na stałe, jeśli chcesz, zobacz inne odpowiedzi poniżej.

Pomoc GitHub sugeruje również, że jeśli korzystasz z Mac OS X i użyłeś Homebrew do zainstalowania Git, możesz użyć natywnego magazynu kluczy Mac OS X z:

git config --global credential.helper osxkeychain

W systemie Windows istnieje pomocnik o nazwie Git Credential Manager dla Windows lub Wincred w msysgit .

git config --global credential.helper wincred # obsolete

Z Git dla Windows 2.7.3+ (marzec 2016):

git config --global credential.helper manager

W systemie Linux możesz użyćgnome-keyring (lub innej implementacji kluczy, takiej jak KWallet).

W wersjach Git wcześniejszych niż 1.7.9

W wersjach Git wcześniejszych niż 1.7.9 ta bardziej bezpieczna opcja nie jest dostępna i musisz zmienić adres URL originużywany przez pilota, aby dołączyć hasło w ten sposób:

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

... innymi słowy z :passwordpo nazwie użytkownika i przed @.

Możesz ustawić nowy adres URL originpilota:

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

Upewnij się, że używasz https, i powinieneś mieć świadomość, że jeśli to zrobisz, twoje hasło GitHub zostanie zapisane w postaci zwykłego tekstu w twoim .gitkatalogu, co jest oczywiście niepożądane.

Z każdą wersją Gita (cóż, od wersji 0.99)

Alternatywnym podejściem jest umieszczenie nazwy użytkownika i hasła w ~/.netrcpliku, chociaż, podobnie jak w przypadku przechowywania hasła w zdalnym adresie URL, oznacza to, że twoje hasło będzie przechowywane na dysku jako zwykły tekst, a zatem jest mniej bezpieczne i nie jest zalecane. Jeśli jednak chcesz zastosować to podejście, dodaj następujący wiersz do ~/.netrc:

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

... wymianie <hostname>z hosta serwera, a <username>i <password>podając swoją nazwę użytkownika i hasło. Pamiętaj również, aby ustawić restrykcyjne uprawnienia systemu plików dla tego pliku:

chmod 600 ~/.netrc

Należy pamiętać, że w systemie Windows ten plik powinien zostać wywołany _netrci może być konieczne zdefiniowanie zmiennej środowiskowej% HOME% - więcej informacji:


72
Nie przechowuj hasła w postaci zwykłego tekstu. Od wersji Git 1.7.9 można używać pomocników poświadczeń. git config --global credential.helper osxkeychainw systemie OS X. W przypadku innych systemów operacyjnych patrz help.github.com/articles/set-up-git
dazonic

6
FWIW, brelok do kluczy osx jest częścią podstawowego kodu źródłowego GIT, nie jest wyłącznym składnikiem Brew lub MacPorts, czy jakikolwiek inny smak miesiąca. I nawet nie musisz budować gita od zera - po prostu cd contrib / credential / osxkeychain / i uruchom make.
synthesizerpatel

2
Dzięki uwierzytelnianiu dwuskładnikowemu musisz użyć tego, co github nazywa tokenem dostępu do osoby . W rzeczywistości zawsze powinieneś używać jednego, ponieważ w przeciwieństwie do hasła możesz kontrolować, jaki daje dostęp. Wystarczy wymienić hasło w adresie URL, aby uzyskać https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git. Dzięki temu hasła zwykłego tekstu przechowywane na dysku są prawie wystarczająco bezpieczne do użycia.
Russell Stuart

12
git config --global credential.helper cachenie działa w systemie Windows: stackoverflow.com/questions/11693074/... użyj gitcredentialstore w systemie Windows i ciesz się
Sebastian J.

8
Jakiś sposób ustawić limit czasu na nieskończoność?
sudo,

720

Możesz również poprosić Git o przechowywanie twoich danych uwierzytelniających na stałe, korzystając z następujących opcji:

git config credential.helper store

Uwaga: Chociaż jest to wygodne, Git będzie przechowywać twoje dane uwierzytelniające w postaci zwykłego tekstu w pliku lokalnym (.git-referencje) w katalogu projektu (patrz poniżej katalog „domowy”). Jeśli ci się nie podoba, usuń ten plik i przejdź do korzystania z opcji pamięci podręcznej.

Jeśli chcesz, aby Git wznawiał prośbę o podanie poświadczeń za każdym razem, gdy musi połączyć się ze zdalnym repozytorium, możesz uruchomić tę komendę:

git config --unset credential.helper

Aby przechowywać hasła w .git-credentialsswoim %HOME%katalogu w przeciwieństwie do katalogu projektu: użyj --globalflagi

git config --global credential.helper store

7
W systemie Windows można pobrać narzędzie pomocnicze, które konfiguruje przechowywanie zaszyfrowanej wersji hasła GIT w Windows Creditial Store, patrz confluence.atlassian.com/display/STASH/…
Contango

76
Stwierdziłem, że muszę określić opcję --global, aby spróbować zapisać ustawienia w bieżącym repozytorium:git config --global credential.helper store
Brian Gordon

6
Dlaczego pamięć podręczna miałaby robić zamiast przechowywania na stałe? Udostępniasz komputery czy coś?
Michael J. Calkins

2
@BrianGordon Używam GIT 1.9.5 w systemie Windows, a --globalflaga była zbędna. Nawet bez tej flagi plik poświadczeń został utworzony w %USER_HOME%katalogu.
jFrenetic

2
jeśli nie jest przechowywany jako zwykły tekst, z czym jest chroniony? Twoje hasło? Czy nie musiałbyś wtedy prosić o hasło administratora podczas łączenia się z git? Czy wpisywanie hasła nie jest trochę dziwne?
Cruncher

101

TLDR; Użyj zaszyfrowanego pliku netrc z Git 1.8.3+ .

Zapisywanie hasła do adresu URL repozytorium Git HTTPS jest możliwe w systemie Windows ~/.netrc(Unix) lub %HOME%/_netrc(zwróć uwagę na _).

Ale : ten plik przechowuje twoje hasło w postaci zwykłego tekstu.

Rozwiązanie : Zaszyfruj ten plik za pomocą GPG (GNU Privacy Guard) i każ Git odszyfrować go za każdym razem, gdy potrzebuje hasła (do operacji push/ pull/ fetch/ clone).


Uwaga: w Git 2.18 (Q2 2018) możesz teraz dostosować GPG używane do odszyfrowywania zaszyfrowanego .netrcpliku.

Zobacz commit 786ef50 , commit f07eeed (12 maja 2018) autor: Luis Marsano (``) .
(Połączone przez Junio ​​C Hamano - gitster- w commit 017b7c5 , 30 maja 2018)

git-credential-netrc: zaakceptuj gpgopcję

git-credential-netrczostał zakodowany na stałe do odszyfrowania za pomocą „ gpg” bez względu na opcję gpg.program.
Jest to problem związany z dystrybucjami takimi jak Debian, które nazywają współczesne GnuPG czymś innym, na przykład ' gpg2'


Instrukcje krok po kroku dla systemu Windows

W systemie Windows:

(Git ma gpg.exew swojej dystrybucji, ale korzystanie z pełnej instalacji GPG obejmuje również gpg-agent.exe, który zapamięta twoje hasło powiązane z twoim kluczem GPG.)

  • Zainstaluj gpg4Win Liteminimalny interfejs wiersza polecenia gnupg (weź najnowszygpg4win-vanilla-2.X.Y-betaZZ.exe ) i uzupełnij ŚCIEŻKĘ katalogiem instalacyjnym GPG:

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

(Zwróć uwagę na copypolecenie „: Git będzie potrzebował skryptu Bash, aby wykonać polecenie gpg”. Ponieważ gpg4win-vanilla-2jest dostarczany gpg2.exe, musisz go zduplikować.)

  • Utwórz lub zaimportuj klucz GPG i zaufaj mu:

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

(Pamiętaj, aby umieścić hasło do tego klucza.)

  • Ufaj temu kluczowi

  • Zainstaluj skrypt pomocnika poświadczeń w katalogu w %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

(Uwaga: nazwa skryptu została zmieniona w Git 2.25.x / 2.26, patrz poniżej)

(Tak, jest to skrypt Bash, ale będzie działał w systemie Windows, ponieważ zostanie wywołany przez Git.)

  • Utwórz plik _netrc w postaci zwykłego tekstu

    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

(Nie zapomnij „ protocol”: „ http” lub „ https” w zależności od używanego adresu URL).

  • Zaszyfruj ten plik:

    gpg -e -r a_recipient _netrc

(Teraz można usunąć ten _netrcplik, zachowując jedynie _netrc.gpgzaszyfrowany jeden).

  • Użyj tego zaszyfrowanego pliku:

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

(Uwaga /: „w C:\path\to...ogóle nie działa.) (Możesz użyć na początku, -v -daby zobaczyć, co się dzieje).

Odtąd każde polecenie Git korzystające z adresu URL HTTP (S), które wymaga uwierzytelnienia, odszyfruje ten _netrc.gpgplik i użyje loginu / hasła powiązanego z serwerem, z którym się kontaktujesz. Za pierwszym razem GPG poprosi o podanie hasła twojego klucza GPG, aby odszyfrować plik. Innym razem, gpg-agent uruchamiany automatycznie przez pierwsze połączenie GPG dostarczy Ci to hasło.

W ten sposób możesz zapamiętać kilka adresów URL / loginów / haseł w jednym pliku i przechowywać je na dysku zaszyfrowanym.
Uważam, że jest to wygodniejsze niż pomocnik „pamięci podręcznej”, w którym musisz zapamiętać i wpisać (raz na sesję) inne hasło dla każdej ze zdalnych usług, aby wspomniane hasło mogło być buforowane w pamięci.


W Git 2.26 (Q1 2020) przykładowy pomocnik poświadczeń użycia .netrczostał zaktualizowany, aby działał od razu po wyjęciu z pudełka. Zobacz łatkę / dyskusję .

Zobacz commit 6579d93 , commit 1c78c78 (20 grudnia 2019) autorstwa Denton Liu ( Denton-L) .
(Połączone przez Junio ​​C Hamano - gitster- w commit 1fd27f8 , 25 grudnia 2019)

contrib/credential/netrc: PERL_PATHskonfiguruj

Podpisano: Denton Liu

Ścieżka shebang dla interpretera Perla git-credential-netrcbyła na stałe zakodowana.
Jednak niektórzy użytkownicy mogą mieć go w innym miejscu i dlatego musieliby ręcznie edytować skrypt.

Dodaj .perlprzedrostek do skryptu, aby oznaczyć go jako szablon i zignoruj ​​wygenerowaną wersję.
Powiększać się Makefiletak, że generuje git-credential-netrcod git-credential-netrc.perl, podobnie jak innych skryptów Perl.

Przepisy Makefile zostały bezwstydnie skradzione contrib/mw-to-git/Makefile.

I:

Wraz z wersją 2.26 (Q1 2020), przykładowy pomocnik poświadczeń do używania .netrc został zaktualizowany do pracy po wyjęciu z pudełka.

Zobacz commit 6579d93 , commit 1c78c78 (20 grudnia 2019) autorstwa Denton Liu ( Denton-L) .
(Połączone przez Junio ​​C Hamano - gitster- w commit 1fd27f8 , 25 grudnia 2019)

contrib/credential/netrc: praca poza repozytorium

Podpisano: Denton Liu

Obecnie git-credential-netrcnie działa poza repozytorium git. Nie udaje się z powodu następującego błędu:

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

Jednak nie ma żadnego rzeczywistego powodu, dla którego trzeba być w repozytorium. Pomocnicy poświadczeń powinni również dobrze działać poza repozytorium.

Wywołaj wersję inną niż self config(), aby git-credential-netrcnie trzeba było jej już uruchamiać w repozytorium.

Jeff King ( peff) dodaje:

Zakładam, że używasz szyfrowanego gpg netrc(jeśli nie, prawdopodobnie powinieneś po prostu użyć credential-store).
W przypadku dostępu do hasła „tylko do odczytu” uważam, że takie połączenie passz konfiguracją jest nieco ładniejsze:

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

1
próbuję tego samego na Linuksie .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" .. i otrzymuję "git: 'credential-netrc' nie jest polecenie git. patrz 'git --help' ”
słoneczny

4
@sunny Do tego właśnie curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrcsłuży: musisz skopiować git-credential-netrcdowolne miejsce na swojej ścieżce ( $PATH), aby git mógł wywołać „ credential-netrc”.
VonC

Cóż, _netrcnie działało to dla mnie na Windows 7PC, ale .netrcdziałało dla youtube-dl z --netrcprzekazanym argumentem.
Iulian Onofrei

@VonC wydaje się, że bieżący adres URL https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(przesyłanie w ciągu siedmiu lat później 😉)
Gwyneth Llewelyn

1
@GwynethLlewelyn Dziękuję. Odpowiednio zredagowałem odpowiedź. Nie wahaj się go edytować samodzielnie, jeśli zobaczysz inne nieaktualne informacje.
VonC

43

Istnieje prosty, staromodny sposób przechowywania poświadczeń użytkownika w adresie URL HTTPS:

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

Możesz zmienić adres URL za pomocą git remote set-url <remote-repo> <URL>

Oczywistym minusem tego podejścia jest to, że musisz przechowywać hasło w postaci zwykłego tekstu. Nadal możesz po prostu wpisać nazwę użytkownika ( https://user@github.com/...), co pozwoli ci zaoszczędzić co najmniej połowę kłopotów.

Możesz przełączyć się na SSH lub użyć oprogramowania klienta GitHub.


2
Nazwa użytkownika / hasło może wymagać zakodowania, patrz stackoverflow.com/a/34611311/3906760
MrTux

43

Użyj magazynu danych logowania.

Dla Git 2.11+ na OS X i Linux , wykorzystanie wbudowanego w Git magazynu danych logowania :

git config --global credential.helper libsecret

W przypadku msysgit 1.7.9+ w systemie Windows :

git config --global credential.helper wincred

W przypadku Git 1.7.9+ na OS X użyj:

git config --global credential.helper osxkeychain

2
Jestem pewien, że jest to właściwy sposób, ale niestety git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
pojawia

1
Dzięki, ale jakoś dostaję ten sam błąd. czy robię coś źle? Wpisuję polecenie i nic się nie dzieje. Jak tylko wypycham, jestem proszony o poświadczenia, które pomyślnie wstawiłem, ale pojawia się błąd, że po wykonaniu tej czynności nie jest to polecenie git.
codepleb

2
Zanim libsecret będzie działał na Linuksie, musisz wykonać następujące kroki: stackoverflow.com/a/40312117/775800
Lavamantis

1
Jeszcze jedno - jeśli masz włączone 2FA w Github, twoje hasło nie będzie działać. Możesz jednak utworzyć osobisty token dostępu na stronie „Ustawienia” Github, a token ten działa jak hasło. github.com/github/hub/issues/822
Lavamantis

3
Problem bezpieczeństwa: Menedżer poświadczeń systemu Windows udostępnia hasło w postaci zwykłego tekstu każdemu, kto zaloguje się na Twoje konto Windows. Wszystko, co muszą zrobić, to wysłać zapytanie do menedżera poświadczeń, takiego jak printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( więcej szczegółów tutaj ). Z tym zawsze powinieneś używać osobistego tokena dostępu i oczywiście 2FA na swoim koncie GitHub.
cjs

40

Możesz po prostu użyć

git config credential.helper store

Kiedy następnym razem wprowadzisz hasło za pomocą pull lub push, zostanie ono zapisane w pliku .git-credentials jako zwykły tekst (trochę niezabezpieczony, ale po prostu umieść go w chronionym folderze).

I to wszystko, jak stwierdzono na tej stronie:

git-credential-store


3
W przypadku Git dla Windows 2.7.3 (marzec 2016 r.): Github.com/git-for-windows/git/releases?after=v2.8.4.windows.1 , to byłoby git config credential.helper managerzamiast tego
VonC

23

Nie od razu zrozumiałem, że najpierw muszę pobrać pomocnika! Znalazłem pobieranie credential.helper w Atlassian's Permanently uwierzytelnianie za pomocą repozytoriów Git .

Zacytować:

Wykonaj następujące kroki, jeśli chcesz używać Git z buforowaniem referencji w OS X:

Pobierz binarny git-credential-osxkeychain.

Uruchom poniższe polecenie, aby upewnić się, że plik binarny jest wykonywalny:

chmod a+x git-credential-osxkeychain

Umieść go w katalogu /usr/local/bin.

Uruchom poniższe polecenie:

git config --global credential.helper osxkeychain

23

Wystarczy podać poświadczenia logowania jako część adresu URL:

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

Uwaga: nie polecam tej metody, ale jeśli spieszysz się i nic więcej nie działa, możesz użyć tej metody.


12
zadziała, musisz uciec @ z% 40 w swoim identyfikatorze e-mail
Tarun Gupta

Co jeśli mamy identyfikator „+” w identyfikatorze e-maila? Próbowałem tej samej ucieczki, ale push powiedział „repo not found”
killjoy

4
mają% 2B zamiast +
Tarun Gupta

Przechowywanie hasła w postaci zwykłego tekstu i łatwo dostępnego może nie być optymalnym rozwiązaniem.
ograniczenie aktywności

20

W konfiguracji GNU / Linux ~ / .netrc też działa całkiem dobrze:

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

Może to zależeć od bibliotek sieciowych używanych przez Git do transportu HTTPS .


4
Upewnij się także chmod 0600 ~/.netrc.
poolie

Po prostu chcę tutaj zostawić link do strony podręcznika Ubuntu netrc . Musiałem go utworzyć dla innego użytkownika (/home/git/.netrc), a następnie zmienić właściciela na tego użytkownika.
zacharydl

17

W systemie Windows możesz użyć wtyczki Git Credential Manager (GCM). Obecnie jest utrzymywany przez Microsoft. Zaletą jest to, że zapisuje hasło w Windows Credential Store, a nie jako zwykły tekst.

Na stronie z wydaniami projektu znajduje się instalator . Spowoduje to również zainstalowanie oficjalnej wersji Git dla Windows z wbudowanym menedżerem poświadczeń. Umożliwia uwierzytelnianie dwuskładnikowe dla GitHub (i innych serwerów). I ma interfejs graficzny do początkowego logowania.

Użytkownicy Cygwin (lub użytkownicy korzystający już z oficjalnego Git dla Windows) mogą preferować instalację ręczną. Pobierz pakiet zip ze strony wydań . Wyodrębnij pakiet, a następnie uruchom install.cmdplik. To zainstaluje się w twoim ~/binfolderze. (Upewnij się, że ~/binkatalog znajduje się w ŚCIEŻCE). Następnie skonfiguruj go za pomocą tego polecenia:

git config --global credential.helper manager

Następnie Git uruchomi się git-credential-manager.exepodczas uwierzytelniania na dowolnym serwerze.


3
Każdy, kto zaloguje się na twoje konto, ma łatwy dostęp do zwykłego tekstu hasła. Wszystko, co muszą zrobić, to wysłać zapytanie do menedżera poświadczeń, takiego jak printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( więcej szczegółów tutaj ). Z tym zawsze powinieneś używać osobistego tokena dostępu i oczywiście 2FA na swoim koncie GitHub.
cjs

13

Jeśli nie chcesz przechowywać hasła w postaci zwykłego tekstu, jak powiedział Mark, możesz użyć innego adresu URL GitHub do pobierania niż do wypychania. W pliku konfiguracyjnym w obszarze [remote "origin"]:

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

Nadal będzie pytać o hasło po naciśnięciu, ale nie podczas pobierania, przynajmniej w przypadku projektów open source.


12

OAuth

Możesz utworzyć swój osobisty token API ( OAuth ) i używać go w taki sam sposób, jak zwykłych danych uwierzytelniających (w:) /settings/tokens. Na przykład:

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

.netrc

Inną metodą jest skonfigurowanie użytkownika / hasła w ~/.netrc( _netrcw systemie Windows), np

machine github.com
login USERNAME
password PASSWORD

W przypadku HTTPS dodaj dodatkowy wiersz:

protocol https

Pomocnik poświadczeń

Aby buforować hasło GitHub w Git podczas korzystania z HTTPS, możesz użyć pomocnika poświadczeń, aby powiedzieć Gitowi, aby zapamiętał twoją nazwę użytkownika i hasło GitHub za każdym razem, gdy rozmawia z GitHub.

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helperjest wymagany),
  • Windows: git config --global credential.helper wincred
  • Linux i inne: git config --global credential.helper cache

Związane z:


10

Możesz użyć pomocników poświadczeń.

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

gdzie xjest liczba sekund.


7
Jest to liczba sekund ... Niektórzy geniusz aktualizowali go w milisekundach i wszyscy zatwierdzili go bez sprawdzania. Nie wprowadzaj ludzi w błąd, jeśli nie znasz odpowiedzi. Dzięki!
Charan

Możesz podać link do miejsca, gdzie store, cachei innych wspólnych rzeczy są wymienione i wyjaśnione?
Notinlist,

3
Chcesz wspomnieć o fakcie, że to robi gówno, chyba że wywołasz inną konkretną komendę, aby najpierw użyć „pamięci podręcznej” jako menedżera? Te rzeczy są tak tajemnicze, że wszystkie te odpowiedzi są niekompletne i żadna z nich nie działa. Niezwykle frustrujące. Zobacz to zamiast tego: stackoverflow.com/a/24800870/88409
Triynko

10

Po sklonowaniu repozytorium repomożesz edytować repo/.git/configi dodać konfigurację, jak poniżej:

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

Wtedy nie będzie pytany o usernamei passwordponownie.


Działa dla mnie z helper = manager(ale jestem proszony o nazwę użytkownika + repo dla pierwszego wypychania).
Stéphane Laurent,

with helper = manager Dostaję błąd credential-manager nie jest poleceniem git
Kapil

Niestety git ignoruje hasło w pliku konfiguracyjnym. .git_credentials z credential.store jest jedyną opcją.
Avamander,

9

Wiem, że to nie jest bezpieczne rozwiązanie, ale czasami potrzebujesz tylko prostego rozwiązania - bez instalowania czegokolwiek innego. A ponieważ helper = sklep nie działał dla mnie, stworzyłem pomocnika:

Utwórz skrypt i umieść go w folderze bin użytkowników, tutaj o nazwie credfake , ten skrypt dostarczy twoją nazwę użytkownika i hasło:

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

spraw, by był wykonywalny:

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

następnie skonfiguruj to w git:

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

(lub użyj go bez opcji --global tylko dla jednego repozytorium)

oraz - voilá - git użyje tego użytkownika + hasło.


Zgadzam się. Rzeczywiście proste (jeśli niezabezpieczone) rozwiązanie. +1, o ile wiesz, co robisz.
VonC

7

Zamiast hasła do konta należy użyć tokena uwierzytelniającego. Przejdź do ustawień / aplikacji GitHub, a następnie utwórz osobisty token dostępu. Token może być używany w taki sam sposób jak hasło.

Token ma umożliwić użytkownikom nieużywanie hasła do konta do prac projektowych. Używaj hasła tylko podczas prac administracyjnych, takich jak tworzenie nowych tokenów lub odwoływanie starych tokenów.


Zamiast tokena lub hasła, które zapewniają użytkownikowi pełny dostęp do konta GitHub, można użyć klucza wdrażania specyficznego dla projektu, aby przyznać dostęp do pojedynczego repozytorium projektu. Projekt Git można skonfigurować tak, aby używał tego innego klucza w następujących krokach, gdy nadal można uzyskać dostęp do innych kont lub projektów Git przy użyciu zwykłych poświadczeń:

  1. Napisz plik konfiguracyjny SSH, który zawiera Host, IdentityFiledla klucza wdrażania, być może UserKnownHostsFile, a może User(choć myślę, że go nie potrzebujesz).
  2. Napisz skrypt powłoki opakowania SSH, który właściwie jest ssh -F /path/to/your/config $*
  3. Przygotuj się GIT_SSH=/path/to/your/wrapperprzed normalnym poleceniem Git. Tutaj git remote(pochodzenie) musi używać git@github.com:user/project.gitformatu.

7

Lepiej jest użyć poświadczeń dla bezpieczeństwa, ale możesz zachować je przez pewien czas używając pamięci podręcznej:

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

Twoje dane logowania zostaną zapisane na 3600 sekund.


Oznacza to, że po 3600 sekundach musimy ponownie wprowadzić hasło? Jak zapisać je na stałe?
HoangVu,

$ git config credential.helper 'cache --timeout = 3600' błąd: nie można zablokować pliku konfiguracyjnego .git / config: Brak takiego pliku lub katalogu
PlantationGator

To działało: git config --global credential.helper 'cache --timeout = 3600'
PlantationGator

@Tama Wiem, że minęły trzy lata, ale możesz po prostu pominąć, --timeouta poświadczenia zostaną zapisane na zawsze.
Neil Chowdhury,

Czy to zadziała w kontenerze Docker (na podstawie windowsservercore)?
Peter Mortensen

5

Sprawy wyglądają trochę inaczej, jeśli używasz uwierzytelniania dwuskładnikowego tak jak ja. Ponieważ nie znalazłem dobrej odpowiedzi gdzie indziej, przykleję ją tutaj, aby być może później.

Jeśli używasz uwierzytelniania dwuskładnikowego, wówczas podanie nazwy użytkownika / hasła nawet nie zadziała - otrzymasz odmowę dostępu. Możesz jednak użyć tokena dostępu do aplikacji i skorzystać z pomocnika Gita, aby buforować go za Ciebie. Oto odpowiednie linki:

I nie pamiętam, gdzie to widziałem, ale kiedy jesteś proszony o swoją nazwę użytkownika - tam przyklejasz token dostępu do aplikacji. Następnie pozostaw puste hasło. Działa na moim komputerze Mac.


w przypadku uwierzytelniania dwukierunkowego jako hasła używasz „tokena dostępu”. nazwa użytkownika pozostaje taka sama jak zawsze
Ben Yitzhaki


4

Zwykle masz zdalny adres URL, coś takiego,

git remote -v

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

Jeśli chcesz pominąć nazwę użytkownika i hasło podczas korzystania git push, spróbuj tego:

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

Właśnie dodałem ten sam adres URL (z danymi użytkownika, w tym hasłem) do źródła.

UWAGA: Nie działa, jeśli nazwa użytkownika to identyfikator e-mail.

git remote -v

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

3

Otrzymałem odpowiedź od strony podręcznika gitcredentials (7) . W moim przypadku nie mam pamięci podręcznej poświadczeń w instalacji Windows; Używam magazynu referencji.

Po użyciu magazynu referencji nazwa użytkownika / hasło są przechowywane w pliku [folder użytkownika] /. Git-credentials. Aby usunąć nazwę użytkownika / hasło, wystarczy usunąć zawartość pliku.


2
Jeśli nie masz pamięci podręcznej poświadczeń w swoich oknach, sugeruję, aby używać git config --global credential.helper wincredtego sklepu hasła na stałe.
Chetabahana

2

Dokumentacja kompozytora wspomina , że można uniemożliwić korzystanie z interfejsu API GitHub, dzięki czemu działa on tak git clone:

Jeśli ustawisz no-apiklucz truena repozytorium GitHub, spowoduje to jego sklonowanie, tak jak w przypadku każdego innego repozytorium Git, zamiast korzystania z interfejsu API GitHub. Ale w przeciwieństwie do gitbezpośredniego korzystania ze sterownika, kompozytor nadal będzie próbował użyć plików zip GitHub.

Więc sekcja wyglądałaby tak:

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

Pamiętaj, że interfejs API istnieje z jakiegoś powodu. Dlatego powinna to być metoda ostateczna w związku ze zwiększonym obciążeniem witryny github.com.


Nie jestem pewien, co ta odpowiedź ma wspólnego z pierwotnym pytaniem.
Charles Oppermann,

2

Również edytować bashrc plik i dodać skrypt w nim.

Spowoduje to prośbę o podanie hasła raz po uruchomieniu Git, a następnie zapamięta je do momentu wylogowania.

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

Jeśli używasz osxkeychain tokena, który wygasł i chcesz go zaktualizować, wykonaj następujące kroki:

Uruchom w terminalu, a następnie naciśnij dwukrotnie klawisz Enter.

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

Teraz powinieneś zostać poproszony o podanie nazwy użytkownika / hasła. Jednak czasami wydaje się, że to nie „zabiera” i trzeba ciągle wchodzić.

Jeśli tak, uruchom ponownie komputer . Teraz następnym razem, gdy uruchomisz polecenie git i wpiszesz swoją nazwę użytkownika / hasło, zostanie ono zapisane.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.