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.



@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


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://username@repository-url.com

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 name@gitlab.com AND name%40mailaddress.com@gitlab.com - 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://USERNAME@github.com': <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

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 git@github.com:zdalny adres URL:

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

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

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 git@gitlab.com: 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

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:password@repository-url.com

1
Co jeśli jest @zawarte w moim haśle? url = https://username:abc@123@repository-url.comDaje mi to błąd, żeCould not resolve host: @123@git.com
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”)


16

Zmiana sklonowanego repozytorium działa:

git remote set-url origin git@github.com: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).


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.


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


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>

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.


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

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


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 user_name@example.gitrepo.com/my_repo.git


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://git@github.com/.insteadOf https://github.com/

url.<base>.insteadOfjest tutaj udokumentowane .


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.


1

Możesz po prostu biec

git config --global credential.helper wincred

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


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 .

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.