git wypycha niewłaściwego użytkownika z terminala


112

Mam problem z git i moim terminalem.

Oto galeria przedstawiająca mój numer: http://imgur.com/a/6RrEY

Kiedy wypycham zatwierdzenia z mojego terminala, git mówi, że wysyłam je z inną nazwą użytkownika, to jest użytkownik z mojej organizacji (mojej firmy) bez żadnego zatwierdzenia i wygląda na to, że nie należy do nikogo: (sprawdź pierwsze zdjęcie w galerii)

Ale tak się nie dzieje, gdy używam Github dla Maca, w kanale widzę zatwierdzone przez siebie zatwierdzenia.

Problem dotyczy również moich osobistych repozytoriów, mój terminal mówi, że nie mam uprawnień do wypychania zatwierdzeń w tych repozytoriach (co jest oczywiście błędne), ponieważ próbuje wysłać je z tym użytkownikiem: (sprawdź drugie zdjęcie w galerii)

Zgadnij co ? Nie dzieje się tak również w przypadku Github na Maca.

Kilka dni temu zmieniłem komputer na zupełnie nowy, więc zresetowałem cały mój klucz ssh z github i zostawiłem tylko nowy wygenerowany przez Github dla Maca, więc nie sądzę, że jest jakiś ukryty klucz użytkownika duch / ssh gdzieś, ten dysk jest zupełnie nowy: (sprawdź galerię trzecie zdjęcie)

Mój plik .gitconfig jest czysty, są tylko moje dane uwierzytelniające: ( patrz czwarte zdjęcie w galerii)

Naprawdę tego nie rozumiem, pomóż, StackOverflow, jesteś moją jedyną nadzieją.

(Przepraszam za moje słabe umiejętności Gimp i odniesienie do Gwiezdnych Wojen)

EDYCJA: ssh-add -l pokazuje tylko dobry klucz ssh utworzony przez github dla mac i mam tylko jedno konto github

EDIT2: ssh -T git@github.com rozpoznaj mnie jako dobrego użytkownika.

EDIT3: Po kilku testach wygląda na to, że mój terminal wykonuje zatwierdzenia z moją nazwą użytkownika, ale wypycha je drugą, Github for Mac zatwierdza i wypycha z dobrą nazwą użytkownika. jedynki).

EDIT4: W osobistym repozytorium git log --pretty="%h %an %ae"pokazuje moją dobrą nazwę użytkownika

EDIT5: Brak oznak zmiennych środowiskowych, które przesłaniałyby moje poświadczenia w plikuenv . Nawet jeśli spróbuję ustawić te zmienne z dobrymi poświadczeniami, problem będzie się powtarzał.

EDIT6: Wszystko działa normalnie, jeśli zmuszę użytkownika do wejścia na ścieżkę /.git/configrepozytorium, ale nie sądzę, że to dobra opcja:http://USER@github.com/USER/REPO.git

EDIT7: Usunęliśmy użytkownika git, który przekazał mi zmiany, co powoduje kolejny błąd:remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/USER/REPO.git/'

KOŃCOWA EDYCJA: zainstalowałem git z homebrew, git config --global push.default simple wpisałem i teraz pobiera moje poświadczenia nawet bez wymuszania na użytkowniku. To jest dziwne. Dziękuję wszystkim za pomoc, jesteście wspaniali!


2
czek ~/.gitconfigi $project_root/.git/configpliki. Jedna z tych dwóch jest z pewnością błędnie skonfigurowana dla nazwy użytkownika.
mu 無

1
Dziękuję za odpowiedź ansh0l. ~/.gitconfigjest jasne i tak jest $project_root/.git/config. W rzeczywistości mam ten problem z każdym projektem osobistym, projekty robocze mogą być wypychane, ponieważ ten inny użytkownik należy do mojej organizacji, która jest właścicielem tych repozytoriów.
Yinfei

Czy masz wtedy wiele kont na githubie? Jeden do firmy, a drugi do użytku osobistego?
mu 無

Nie, tylko jeden do wszystkiego.
Yinfei

1
Irytującym rozwiązaniem byłoby po prostu zregenerowanie kolejnego klucza SSH. Jeśli używasz swojego obecnego klucza SSH z inną usługą, byłoby to bezcelowe.
Eduardo Bautista,

Odpowiedzi:


168

Właśnie miałem ten problem w pracy. Wbudowany git, który jest dostarczany z komputerem Mac lub pojawia się po zainstalowaniu xcode buforuje poświadczenia git w pęku kluczy. Rozwiązaniem dla mnie było:

uruchom dostęp do pęku kluczy (uruchom reflektor przez cmd + spację, wpisz pęku kluczy, naciśnij enter)

W pękach kluczy w lewym górnym rogu wybierz „login” W kategorii po lewej wybierz „hasła”

znajdź nazwę „github” i usuń ją.


2
Upewnij się, że usunąłeś tutaj cały wpis na github i ustawiłeś konfigurację logowania * git config --global user.name <nazwa> * git config --global user.email <email>
Shank_Transformer

W moim przypadku SourceTree doświadczał tego problemu. Usunięcie przedmiotu z pęku kluczy naprawiło to!
Shoerob

1
@Shank_Transformer Twoje rozwiązanie zadziałało dla mnie! Dziękuję Ci!
Nazariy

Być może będziesz musiał wyszukać (lub uruchomić bezpośrednio) seahorsena Ubuntu.
krakanie

3
Jestem panu
dłużnikiem

46

github identyfikuje cię po kluczu ssh, który widzi, a nie przez jakiekolwiek ustawienie z git.

Dlatego musisz upewnić się, że klucz ssh konta służbowego nie znajduje się w twojej bazie kluczy, gdy próbujesz wypchnąć z konta osobistego i odwrotnie.

Służy ssh-add -ldo określania, które klucze są w twojej pęku kluczy i ssh-add -d <keyfile>do usuwania klucza z twojej breloczka, jeśli nie działa, usuń „niechciany” klucz ssh z ~/.ssh/config.

źródło

Uwaga: Github nadal będzie identyfikować Twoje zatwierdzenie na podstawie wiadomości e-mail.


5
To jedyna odpowiedź, która wyjaśnia, dlaczego ciągle korzystał z niewłaściwego konta github, mimo że moje konto user.emailbyło ustawione poprawnie. Chciałbym móc pięć razy głosować za.
Chris

1
w moim przypadku usunięcie klucza ssh działało jak urokssh-add -D
rPawel

To była jedyna odpowiedź, która mi pomogła. Dzięki!!
Edward Hartnett

Jedyna opcja, która zadziałała. Nie ma sensu, dlaczego git nie wybrałby właściwego klucza. Ponieważ wspominamy o pliku ssh, którego musi używać w config.
Revanth Kumar

Kiedy ssh-add -lotrzymuję odpowiedź, która nie pomaga. Wpisuje, 4096 SHA256:lotsOfGibberish,about40chars (RSA)że nie wiem, jak nam te informacje.
MiguelMunoz

20

Pomimo wszystkich wspaniałych opcji oferowanych przez innych użytkowników, jedynym sposobem na naprawienie tego było całkowite przeinstalowanie gita i wpisanie git config --global push.default simpletekstu, aby przepisać dobre poświadczenia.


@VonC, mimo że Twoja odpowiedź była świetna, w ogóle nie działała. To jedyne rozwiązanie, które u mnie zadziałało. Zastanawiam się, czy to kwestia gita, czy OSX ...
swilgosz

40
git config --system --unset credential.helperzadziałało dla mnie, teraz ponownie jestem proszony o podanie moich poświadczeń GitHub i mogę podać poprawny identyfikator użytkownika i hasło.
CodeManX

@CoDEmanX twoja była jedyną odpowiedzią, która zadziałała dla mnie. Dla każdego, kto się z tym spotka, dzieje się tak dlatego, że używamy 2FA w pracy z github i musiałem najpierw wygenerować token z github gui i użyć go jako mojego hasła z wiersza poleceń po zresetowaniu lokalnych poświadczeń! sprawdź https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/, aby uzyskać szczegółowe informacje
vancouverwill

To tylko plik .gitconfig. Usuń to lub zresetuj ... Napotkałem ten problem, kiedy przesłałem projekt próbny na rozmowę kwalifikacyjną. Cholera, to jednak boli. Jest z plikiem konfiguracyjnym
Girish

git config --system --unset credential.helpernie działa na Windows 10 git bash:error: could not lock config file C:/Program Files/Git/mingw64/etc/gitconfig: Permission denied
alex

17

Używam systemu Windows 10 i dzisiaj miałem ten sam problem. W moim przypadku moje poświadczenia dla innego użytkownika zostały zapisane przez Windows Credential Manager. W ten sposób usuwanie / kasowanie poświadczeń git za pomocą poniższego polecenia, git config --global --unset credential.helper

nie pomogło. Musiałem ręcznie usunąć wpis w systemie Windows, postępując zgodnie z poniższym sposobem,

Start -> Panel sterowania ---> Konta użytkowników ---> Zarządzaj swoimi poświadczeniami ---> Poświadczenia systemu Windows

Następnie wyszukaj wpis, taki jak git: https://github.com i usuń go. Po tym działa dobrze.


Dziękuję Gowtham
Balint

Dziękuję, nigdy wcześniej nie miałem tego problemu w systemie Windows, ale dzisiaj miałem ten problem i cieszę się, że mogę zobaczyć tutaj Twój komentarz.
RaKoDev

Mówisz, że "nie pomogło", ale jeśli dało ci komunikat, że nie może zablokować pliku konfiguracyjnego, problem polega po prostu na tym, że musisz go uruchomić z podwyższonego wiersza polecenia, jak wskazano w komentarzu powyżej .
Stefan

15

wygląda na to, że mój terminal wykonuje zatwierdzenia z moją nazwą użytkownika, ale wypycha je za pomocą drugiego

Imię i nazwisko autora i autora publikacji (które są ważne dla GitHub) pochodzą z:

git config user.name
git config user.email

Jednak, jak wspomniano w git configi git commit-tree, wartości te mogą zostać przesłonięte przez zmienne środowiskowe:

GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL

Więc sprawdź dokładnie te zmienne.

Wszystko działa normalnie, jeśli zmuszę użytkownika do .git/configwejścia do repozytorium, ale nie sądzę, że to dobra opcja.

Ale to powinno być dobre rozwiązanie.
Korzystając z adresu URL https, zawsze określam w nim użytkownika, aby upewnić się, że uwierzytelnianie jest wykonywane przez właściwego użytkownika.

http://USER@github.com/USER/REPO.git

Dziękuję za odpowiedź VonC! Niestety, moje git configdane uwierzytelniające są prawidłowe i nie ma żadnych zmiennych środowiskowych ustawionych w moim /username/.bashrcpliku ...
Yinfei,

@ Yinfei84 jednak sprawdź envwyjście ' '.
VonC,

@ Yinfei84 co by się stało, gdyby (aby to przetestować) jawnie ustawisz te zmienne i spróbujesz zatwierdzić i wypchnąć. Czy wtedy zadziałałoby lepiej?
VonC,

Właśnie to zrobiłem i problem nadal występuje.
Yinfei,

2
Przepraszam, jeśli marnowałem się, miałem na myśli, że zadziałało, jeśli http://USER@github.com/USER/REPO.git
zmuszę

9

Pierwsze uruchomienie jest tymczasowe killall ssh-agent a następnie dodać klucze SSH wygenerowane dla konta, którego chcesz użyćssh-add ~/.ssh/id_4shameer

Pomoże nam to pracować na wielu kontach na githubie, gdy pojawi się błąd typu ERROR: Permission to user/repo-git.git denied to username.


1
Zrobiłem to po usunięciu dowolnego wpisu Github z pęku kluczy MacOS i działało idealnie. Dwa punkty, po killallThe ssh-agent musi być wznowiona eval "$(ssh-agent -s)", a ssh-addpolecenie musi być wykonane z sudo.
arvymetal

7

Jeśli korzystasz z MAC, przejdź do Keychain Access i usuń wpis użytkownika, dla którego nie chcesz uzyskać dostępu.


4

Rozwiązaniem dla mnie było dodanie wpisu w moim pliku ~ / .ssh / config dla github. Musiałem to zrobić, ponieważ:

  1. Miałem wiele kont na githubie z tym samym kluczem (nie rób tego!)
  2. kiedy wykonujesz polecenie „git push” używając ssh, twój komputer domyślnie pobiera id_rsa i używa go jako swojej tożsamości ssh.
  3. github nie może (co nie jest zaskakujące) zdekonfliktować, które konto masz na myśli, ponieważ opiera konto na kluczu, który jest przedstawiony, co jeśli jest powiązane z więcej niż jednym kontem, prowadzi do takiego bólu. Zabójcą jest, przez długi czas, uchodziło mi to na sucho i wszystko się układało.

Wpis, który dodałem, to:

Host github.com
    Hostname github.com
    Port 22
    User waterproofpatch
    IdentityFile ~/.ssh/id_rsa_waterproofpatch

Stworzyłem nowy klucz, unikalny dla mojego konta, jako id_rsa_waterproofpatch. Ten wpis w mojej konfiguracji ssh określa, że ​​dla połączeń z github.com chcę przedstawić ten klucz.

Innym rozwiązaniem prawdopodobnie byłoby zalogowanie się na inne konto, usunięcie zduplikowanego klucza ssh.


2

Miałem podobny problem i okazało się, że problemem był fakt, że plik klucza publicznego zawierał mój adres e-mail w ostatniej linii. Wydawało się, że przesłania to ustawienie użytkownika w mojej konfiguracji. Gdy tylko usunąłem mój e-mail z pliku .pub (i ponownie załadowałem do mojego repozytorium), Git połączył się przy użyciu właściwego użytkownika.


To zadziałało dla mnie. Nie jestem pewien, dlaczego identyfikator w pliku klucza publicznego był pierwotnie w formacie „nazwa @ domena”, ale tak było.
Brian Wagner

1

Udało mi się użyć adresu URL https repozytorium Github zamiast adresu URL ssh . Poszedłem na stronę projektu Github i skopiowałem adres URL https do mojego schowka, a następnie wkleiłem go do drugiego polecenia poniżej:

git remote rm origin
git remote add origin https://[...]

1

Co za wrzód na tyłku!

problem:

  1. utwórz repozytorium w git hub
  2. klonuj na komputer lokalny
  3. nie może wcisnąć 403.

obraca się z nieznanego powodu git push używa niewłaściwego użytkownika. Mam kilka różnych identyfikatorów użytkowników git hub. Pracuję dla 2 różnych firm i mam też legitymację studencką

Pracuję na komputerze Mac. oto co w końcu zrobiłem

1) usuń plik credential.helper

  • trochę, jak pomocnik poświadczeń został ustawiony na osxkeychain
  • kiedy uruchomiłem pęku kluczy, kliknąłem login, hasła i szukałem github, znalazłem 3 wpisy. Nie mam pojęcia, jak pęku kluczy można było wiedzieć, którego użyć

za. musisz dowiedzieć się, gdzie jest skonfigurowany plik credential.helper

git config --local credential.helper
git config --global credential.helper
git config --system credential.helper

b. Po znalezieniu odpowiedniego pliku fig usuń go w następujący sposób

git config --global --unset credential.helper

Teraz w moim lokalnym repozytorium zhakowałem plik .git / config

Zmieniłam

    url = https://github.com/aedavids/lab3RotationProject.git

do

    url = https://myGitHubUserId@github.com/aedavids/lab3RotationProject.git

1

W moim konkretnym przypadku problemem było to, że korzystałem .netrcz dostępu github.comi został skonfigurowany z tokenem od innego użytkownika:

machine github.com login <another-user-token>

0

wyczyszczenie pęku kluczy nie pomogło ... Musiałem ssh-add -Ddodać klucz ponownie za pomocąssh-add <keyfile>


0

Rozwiązałem ten problem, usuwając (lub zmieniając nazwę na * .bak) plików id_rsa i id_rsa.pub na MacOS High Sierra. Pomysł stąd .

Mam niestandardowe przekierowania hosta w ~ / .ssh / config, które powinny zostać zastosowane, ale użyłem niewłaściwego użytkownika, zanim zmienię nazwy dwóch plików ...


0

To właśnie zadziałało dla mnie:

  1. Zmiana poświadczeń w .git-credentials
  2. Zmiana globalnej nazwy użytkownika i adresu e-mail użytkownika w pliku gitconfig

0

Co zadziałało, gdy usunąłem repozytorium i dodałem je ponownie:

git remote rm origin
git remote add origin git@github.com:fguillen/MyApp.git

0

Mam ten sam problem w systemie Windows10 nawet po odinstalowaniu mojego gita, ponieważ @ user542833 mówi, że dzieje się tak, ponieważ pamięć podręczna systemu Windows i powinieneś usunąć poświadczenia Github w swoich oknach, Credential Managera gdy ponownie spróbujesz wypchnąć, Windows zapyta o twoje dane i ustaw je ponownie


To czasami działało dla mnie, ale czasami nie.
bvdb

0

Właśnie spędziłem 6 godzin na zastanawianiu się nad tym, próbując przesłać do nowego repozytorium stron GitHub na nowym koncie.

Nawet po ustawieniu konfiguracji user.name i user.email będzie to domyślnie moje główne konto.

Dzieje się tak, ponieważ klucz ssh będzie domyślnie ustawiony na id_rsa (moje główne konto).

Aby skorzystać z nowego konta musiałem uruchomić:

ssh-add ~/.ssh/my_new_key

co spowoduje, że git użyje nowego klucza podczas wypychania.

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.