jak skonfigurować nazwę użytkownika i hasło dla różnych repozytoriów git?

17
─[$] cat ~/.gitconfig

[user]
    name = Shirish Agarwal
    email = [email protected]
[core]
    editor = leafpad
    excludesfiles = /home/shirish/.gitignore
    gitproxy = \"ssh\" for gitorious.org
[merge]
    tool = meld
[push]
    default = simple
[color]
    ui = true
    status = auto
    branch = auto

Teraz chcę umieścić poświadczenia git dla github, gitlab i gitorious, więc za każdym razem nie muszę sprawdzać poświadczeń w przeglądarce. Jak można to zrobić, aby było zautomatyzowane?

Używam Zsh

shirish
źródło

Odpowiedzi:

21

Korzystanie z SSH

Powszechnym podejściem do obsługi uwierzytelniania git jest delegowanie go do SSH. Zazwyczaj ustawiasz swój klucz publiczny SSH w zdalnym repozytorium ( np. Na GitHub ), a następnie używasz go, ilekroć potrzebujesz uwierzytelnienia. Możesz oczywiście użyć kluczowego agenta, obsługiwanego przez środowisko pulpitu lub ręcznie za pomocą ssh-agenti ssh-add.

Aby uniknąć konieczności podawania nazwy użytkownika, możesz skonfigurować ją również w SSH, w ~/.ssh/config; na przykład mam

Host git.opendaylight.org
  User skitt

a potem mogę sklonować za pomocą

git clone ssh://git.opendaylight.org:29418/aaa

(zwróć uwagę na brak nazwy użytkownika).

Za pomocą gitcredentials

Jeśli podejście SSH nie ma zastosowania ( np. Używasz repozytorium dostępnego przez HTTPS), git ma swój własny sposób obsługi poświadczeń, używając gitcredentials(i zwykle git-credential-store). Swoją nazwę użytkownika podajesz za pomocą

git config credential.${remote}.username yourusername

i pomocnika przy użyciu poświadczeń

git config credential.helper store

(określ, --globalczy chcesz używać tej konfiguracji wszędzie).

Następnie przy pierwszym dostępie do repozytorium git poprosi o podanie hasła, które zostanie zapisane (domyślnie w ~/.git-credentials). Kolejne dostępy do repozytorium będą używać zapisanego hasła zamiast pytania.

Stephen Kitt
źródło
1
możesz trochę rozwinąć temat credential.${remote} i credential.helper. Czy jest jakaś dokumentacja, którą mógłbyś wskazać, ponieważ czytam o tym po raz pierwszy.
shirish
W odpowiedzi włączyłem linki do stron, to jest dokumentacja. ${remote}jest częścią URI protokołu i nazwy hosta, którą chcesz sklonować, helperwskazuje program pomocniczy.
Stephen Kitt
1
Istnieje również rozdział Pro Git na ten temat.
Stephen Kitt
7

Dla tych, którzy odkryli to później - miałem z tym trudności i wreszcie udało mi się to zadziałać

https / credentials.helper / Ubuntu

  1. Wyłączone globalnie:
    git config --global --unset credentials.helper
  2. Unset lokalnie: (W każdym repozytorium) git config --unset credential.helper
  3. Utwórz plik referencji dla każdego repozytorium: (wewnątrz każdego repozytorium)

    git config credential.helper 'store --file ~/.git_reponame_credentials'
    

Nie mówię, że to najlepszy lub jedyny sposób - ale zadziałało to dla mnie po kilku frustrujących godzinach.

SteveJ
źródło
wydaje się być podobny do tego, co Stephen Kitt udostępnił powyżej.
shirish
2
@shirish nie bardzo, trzeci punkt był tym, którego potrzebowałem - opcja, aby określić, gdzie znajdują się pliki.
Mārtiņš Briedis
@shirish; Ponadto instrukcje Kittsa nie określają un ustawiania poświadczeń, co było dla mnie kluczowym elementem, ponieważ ustawiłem je już globalnie.
SteveJ,
Miałem też z tym problem, ponieważ nie jest tak, jakby wszystkie repozytorium git. otrzymasz będzie z tego samego źródła / sklepu. Drugi jest lepszy, ale o wiele bardziej frustrujący do pracy w rzeczywistości. Nadal dziękuję za udostępnienie. @SteveJ
shirish