Git pyta o nazwę użytkownika za każdym razem, gdy pcham

675

Ilekroć próbuję wcisnąć do mojego repozytorium, prosi o jedno i drugie username & password.

Nie mam problemu z ponownym wprowadzaniem hasła za każdym razem, ale problem polega na wprowadzeniu nazwy użytkownika. Używam httpsdo klonowania mojego repozytorium.

Jak mogę skonfigurować git, aby nie pytał usernameo każdy z nich git push.

Jestem nowy w systemie Linux, ale IIRC w Windows git pushpyta tylko o hasło.

RanRag
źródło
1
Powiązane pytanie: stackoverflow.com/questions/2233590/…
Wug
@Wug: Ale nie chcę przechowywać hasła. Chcę tylko przechowywać nazwę użytkownika.
RanRag
4
spróbuj wykonać te instrukcje i pominąć wiersz hasła.
Wug
jest też odpowiedź na pytanie superuser na twoje pierwsze pytanie - superuser.com/questions/847181/…
dk14

Odpowiedzi:

975

Edytuj (autor: @ dk14 zgodnie z sugestiami moderatorów i komentarzy)

OSTRZEŻENIE: Jeśli użyjesz credential.helper storeodpowiedzi, hasło zostanie zapisane całkowicie niezaszyfrowane („jak jest”) w ~/.git-credentials. Zapoznaj się z sekcją komentarzy poniżej lub odpowiedziami z sekcji „Powiązane”, zwłaszcza jeśli Twój pracodawca nie toleruje problemów związanych z bezpieczeństwem.

Nawet jeśli zostanie zaakceptowany, nie odpowiada na pytanie OP dotyczące pominięcia tylko nazwy użytkownika (nie hasła). Dla czytelników mających dokładnie ten problem przydatna może być odpowiedź @ grawity .


Oryginalna odpowiedź (autor: Alexander Zhu):

Możesz przechowywać swoje poświadczenia za pomocą następującego polecenia

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

Radzę też przeczytać
$ git help credentials

Alexander Zhugastrov
źródło
160
Ostrzeżenie, w tej metodzie nie ma zabezpieczeń. Twoje hasło jest przechowywane jako zwykły tekst.
Mark Lakata
13
można znaleźć lepsze sposoby na osiągnięcie bezpieczeństwa tutaj - stackoverflow.com/a/28104587/1809978
dk14
4
@MarkLakata - Powiedz mi, jak mogę cofnąć polecenie w tej odpowiedzi? Po cofnięciu tego użyję bezpiecznej metody przechowywania poświadczeń.
MasterJoe2
25
@ testerjoe2 trygit config --unset credential.helper
dk14
1
Nie zapomnij ustawić limitu czasu, domyślnie jest to 15 minut - Ustaw wartość na 30 milionów, aby mieć około 1 roku. Znalezione tutaj: stackoverflow.com/a/35942890/1579667
Benj
180

Możesz to zrobić w .git/configpliku lokalnego repozytorium. Ten plik zawiera sekcję o nazwie „zdalny” z wpisem o nazwie „url”. Wpis „url” powinien zawierać link https repozytorium, o którym mówisz.

Po prefiksie „url” hosta nazwą użytkownika gitnie powinieneś już pytać o nazwę użytkownika. Oto przykład:

url = https://[email protected]
MERose
źródło
5
Jeśli używasz znaków specjalnych w nazwie użytkownika lub pw, powinieneś uciec od nich. Zobacz en.wikipedia.org/wiki/Percent-escape, aby znaleźć właściwe znaki ucieczki. na przykład „! @ #” [bez cudzysłowów] zostanie zastąpione przez „% 21% 40% 23”. Zobacz także odpowiedź „Daniel Lerch” poniżej
2014
1
Czy inne osoby pracujące w tym samym repozytorium zobaczą moją nazwę użytkownika?
CodyBugstein,
17
To powinna być poprawna odpowiedź na pytanie PO, tj. „Jak zachować nazwę użytkownika, NIE hasło”. Ta odpowiedź jest nie tylko właściwym sposobem na utrwalenie nazwy użytkownika, ale także pozwala uniknąć potencjalnego zagrożenia bezpieczeństwa git config credential.helper store.
RayLuo
Jestem wdzięczny za tę odpowiedź i próbowałem w ten sposób, ale wciąż pyta mnie za każdym razem (v 2.1.4) - próbowałem remoteurl z [email protected] AND name%[email protected] - zawsze prosi ousername for https://gitlab.com:
eli
1
Próbowałem tego i dostałemunable to access 'https://<me>@bitbucket.org:<x>/<y>.git/': Illegal port number
Ian Grainger
118

Trwałe uwierzytelnianie za pomocą repozytoriów Git

Uruchom następujące polecenie, aby włączyć buforowanie referencji:

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>

Użyj również określić wygasanie buforowania

git config --global credential.helper "cache --timeout 7200"

Po włączeniu buforowania referencji będzie ono buforowane przez 7200 sekund (2 godziny) .


Przeczytaj dokumenty uwierzytelniające

$ git help credentials
Jay Patel
źródło
Ustawiłem limit czasu na 7200. Ale potem pomyślałem, aby ustawić go na 5 do testowania. Więc ustawiłem go na 5, ale potem, gdy próbowałem naciskać ponownie po 30 sekundach, ale nie zostałem poproszony o nazwę użytkownika lub hasło.
Buttle Butkus
Być może Twoje dane logowania nie będą przechowywane na całym świecie.
Jay Patel
Jeśli chodzi o bezpieczeństwo, warto zapoznać się z dokumentacją: „To polecenie buforuje poświadczenia w pamięci do wykorzystania przez przyszłe programy Git. Zapisane poświadczenia nigdy nie dotykają dysku i są zapominane po upływie określonego czasu”. git-scm.com/docs/git-credential-cache
mloskot
2
czy git config credntial.helper storeto niebezpieczne polecenie nie jest odpowiedzialne za przechowywanie referencji w postaci zwykłego tekstu w pliku ~ / .git-credentials? Myślę (i z mojego doświadczenia), że ... pamięć podręczna ... - jest wystarczająca: git config --clogal credential.helper 'cache --timeout 7200'tworzy ~/.git-credential-cachekatalog : z plikiem pamięci podręcznej Więc po prostu wykonaj to polecenie, a NIE polecenie "... przechowuj"
eli
Nie działało dla mnie. Wciąż pytam o hasło za każdym razem
Ian Grainger
75

Dodaj nowe klucze SSH zgodnie z opisem w tym artykule na GitHub .

Jeśli Git nadal prosi o nazwę użytkownika i hasło, spróbuj zmienić https://github.com/na [email protected]:zdalny adres URL:

$ git config remote.origin.url 
https://github.com/dir/repo.git

$ git config remote.origin.url "[email protected]:dir/repo.git"
Łukasz Czerwiński
źródło
19
To powinna być właściwa odpowiedź! Zapisanie danych uwierzytelniających jest niezwykle bezpieczne. Jeśli mam klucz SSH, pyta mnie o moje dane uwierzytelniające tylko dlatego, że nie mam poprawnego adresu URL, jak tutaj opisano.
Alexis Wilke,
2
lub możesz użyćgit config remote.origin.url "ssh://git@yourRepoHost/yourRepoName.git"
ndarkness
1
git config remote.origin.url [email protected]: adammajewski / ray-backward-iteration.git
Adam
1
Dzięki, to była odpowiedź, której szukałem.
Yupeng Tang
50

Najłatwiej znalazłem to polecenie:

git config --global credential.https://github.com.username <your_username>

Działa to dla poszczególnych witryn i modyfikuje globalną konfigurację git.

Aby zobaczyć zmiany, użyj:

git config --global --edit
Ben
źródło
1
Z jakiegoś powodu była to jedyna metoda, która działała dla mnie. Dzięki!
mathetes
czy ta metoda jest bezpieczna? czy hasło github jest przechowywane tylko na komputerze lokalnym i nie jest przekazywane do github?
Akin Hwan
Nie wiem, dlaczego nie jest to zatwierdzona odpowiedź, polecenie działa idealnie i odpowiada w pełni tylko na pytanie: przechowywanie nazwy użytkownika, a nie hasła. Dzięki Ben!
AmaelH
Możesz także uruchomić: [git config --global credential.helper 'cache --timeout = 3600'] Więc twoje hasło będzie zapisywane za godzinę za każdym razem
obenda
31

Jeśli używasz https zamiast ssh, możesz edytować „url” w, .git/configjak mówi user701648, ale jeśli chcesz, możesz również dodać hasło:

url = https://username:[email protected]
Daniel Lerch
źródło
1
Co jeśli jest @zawarte w moim haśle? url = https://username:abc@[email protected]Daje mi to błąd, żeCould not resolve host: @[email protected]
Rahul Mankar
usernameCzęść wydaje się być ignorowane, gdy przekierowania serwera (na przykład z FOO do FOO.git).
Michaił T.
22

Możesz ustawić swoją nazwę użytkownika dla wszystkich repozytoriów w danej witrynie, umieszczając coś takiego jak poniżej w pliku konfiguracyjnym Git. Będziesz chciał zmienić „ https://example.com ” i „ja” na rzeczywisty adres URL i rzeczywistą nazwę użytkownika.

[credential "https://example.com"]
    username = me

(To bezpośrednio z „poświadczeń pomocy git”)

Alan De Smet
źródło
16

Zmiana sklonowanego repozytorium działa:

git remote set-url origin [email protected]:gitusername/projectname.git

Korzystanie z poświadczeń w pamięci podręcznej działa, a ustawienie limitu czasu sprawia, że ​​rzeczy są mniej denerwujące. Jeśli używasz pomocnika poświadczeń systemu Windows, powinna to być najłatwiejsza metoda (szczególnie jeśli SSH jest zablokowany).

Layer8Err
źródło
To jest poprawna odpowiedź dla GitHub (na które pytanie pyta konkretnie ... (nie jestem pewien, dlaczego zostałeś przegłosowany).
Tim Groeneveld
12

Upewnij się, że używasz SSH zamiast http. Sprawdź odpowiedź SO.

gkris
źródło
3
Ale musiałem skorzystać, httpponieważ na moim uniwersytecie sshjest zablokowany przez dział sys-admin.
RanRag,
Być może ten link ci pomoże.
gkris,
Na tej stronie znajduje się oficjalna strona pomocy GitHub. To, co się stało, polegało na tym, że przed zalogowaniem sklonowałem jedno z moich repozytoriów, więc nie rozpoznało mnie i domyślnie wybrało HTTPS. help.github.com/articles/changing-a-remote-s-url
anon58192932
11

git config --global cache credential.helper

Kai Wang
źródło
1
To lepsza odpowiedź w systemie Linux.
Larry
9

Oprócz odpowiedzi user701648 można przechowywać poświadczenia w folderze domowym (globalnym dla wszystkich projektów) zamiast w folderze projektu za pomocą następującego polecenia

$ git config --global credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>
Yuvi
źródło
9

Kiedy tylko git pull, git pull origin xxx, git prosi o podanie nazwy użytkownika i hasła.

git config credential.helper store

to działa.

Langanguang
źródło
9

Najłatwiejszym sposobem jest utworzenie ~/.netrcpliku o następującej treści:

machine github.com
login YOUR_GITHUB_USERNAME
password YOUR_GITHUB_PASSWORD

(jak pokazano tutaj: https://gist.github.com/ahoward/2885020 )

Możesz nawet zamknąć uprawnienia do tego pliku, aby nikt nie mógł odczytać Twojego hasła, wpisując:

chmod 600 ~/.netrc
Prostsze
źródło
6

Jeśli używasz wersji SSH , nie będziesz mieć żadnych problemów z hasłami. Tylko jeden raz wygenerujesz klucz SSH , aby powiedzieć git, że ten komputer będzie działał z tym kontem github i nigdy więcej nie pytaj mnie o dostęp (dla tego komputera).

Jak wygenerować SSH dla Github

Hazarapet Tunanyan
źródło
4

Aby uniknąć wpisywania nazwy użytkownika, ale nadal pojawia się monit o podanie hasła, możesz po prostu sklonować swoje repozytorium, w tym nazwę użytkownika:

git clone [email protected]/my_repo.git
ManoDestra
źródło
3
  1. $ git config credential.helper store

  2. $ git push / push https://github.com/xxx.git

  3. Następnie wprowadź swoją nazwę użytkownika i hasło.

  4. Gotowy
Stephen Tun Aung
źródło
Nie git push/push https://github.com/xxx.gitpowinno tak byćgit push https://github.com/xxx.git
Mohsin,
3

ssh+ key authenticationjest bardziej niezawodnym sposobem niż https+credential.helper

Możesz skonfigurować używanie SSH zamiast HTTPS dla wszystkich repozytoriów w następujący sposób:

git config --global url.ssh://[email protected]/.insteadOf https://github.com/

url.<base>.insteadOfjest tutaj udokumentowane .

Akif
źródło
2

Szybka metoda

uzyskaj adres URL swojego gita, gdy jesteś w pracy reż:

git config remote.origin.url

następnie :

git config credential.helper store

git push "url of your git"

zapyta raz nazwę użytkownika i hasło

gotowy.

Aominé
źródło
1

Możesz po prostu biec

git config --global credential.helper wincred

po zainstalowaniu i zalogowaniu się do GIT dla systemu Windows w systemie.

cyperpunk
źródło
Nie widziałem słowa linux w zapytaniu. Mój zły
cyperpunk
1

(Tylko dla Mac OS)

w systemach Windows i Linux zapoznaj się z linkiem do dokumentacji Github wymienionym poniżej.

Z dokumentacji Github: Link do dokumentacji

Buforowanie hasła do GitHub w Git

  • Aby korzystać z pomocnika poświadczeń osxkeychain, potrzebujesz Git 1.7.10 lub nowszej wersji.

    aby sprawdzić swoją wersję Git: git --version

  • aby dowiedzieć się, że pomocnik osxkeychain jest już zainstalowany:

    git credential-osxkeychain

    jeśli otrzymasz następującą odpowiedź, oznacza to, że masz już zainstalowany i gotowy do użycia na komputerze Mac:

    > Usage: git credential-osxkeychain <get|store|erase>

    jeśli nie otrzymasz odpowiedzi, jak pokazano powyżej, możesz ją zainstalować, uruchamiając następujące polecenie:

    git credential-osxkeychain

  • aby powiedzieć gitowi, aby globalnie używał osxkeychain dla poświadczeń git:

    git config --global credential.helper osxkeychain

    Zostanie wyświetlony monit, zanim zapisze poświadczenia w pęku kluczy .

Akash Gandhi
źródło