Jak wysłać do GitHub pod inną nazwą użytkownika?

156

Znajomy i ja dzielimy się moim komputerem. Wykonałem wypychanie do GitHub przy użyciu powłoki git bash w systemie Windows 7. Teraz jesteśmy w innym projekcie na tym komputerze i potrzebuję jej, aby przesłała dane na jej konto. Ale ciągle próbuje użyć mojej nazwy użytkownika i mówi, że nie mam dostępu do jej repozytorium:

$ git push her_github_repository our_branch
ERROR: Permission to her_username/repository.git denied to my_username.
fatal: The remote end hung up unexpectedly
w.
źródło
Czy to pomaga help.github.com/articles/setting-your-email-in-git (użyj git config --global user.name her_username) przed pchaniem
Prinzhorn
Widzę, że przełączyłeś się na adresy URL HTTPS, więc github zawsze pyta o poświadczenia. Pamiętaj tylko, że zatwierdzenia będą nadal rejestrowane jako wykonane przez użytkownika w git config nazwa.użytkownika i git config user.email, niezależnie od tego, kto faktycznie je wypycha. ps Chyba nie ma historii, kto co naciskał.
Jorge Orpinel
29
git config --local credential.helper ""może załatwić sprawę.
SOFe
Nie mogłem śledzić żadnego z podanych tutaj rozwiązań w moim systemie Windows. Kroki podane w tej odpowiedzi w końcu zadziałały stackoverflow.com/a/15382950/351903
Sandeepan Nath
@SOFe właśnie tego szukałem! Czy to polecenie skutecznie usuwa niektóre dane uwierzytelniające z pamięci podręcznej?
CCJ

Odpowiedzi:

93

Jeśli używasz innego użytkownika systemu Windows, Twój klucz SSH i ustawienia git będą niezależne.

Jeśli nie masz takiej możliwości, znajomy powinien dodać Twój klucz SSH do swojego konta Github.

Chociaż poprzednie rozwiązanie sprawi, że będziesz naciskać tak samo jak ty, ale pozwoli ci wejść do jej repozytorium. Jeśli nie chcesz tego i pracujesz w innym folderze na tym samym komputerze, możesz ustawić nazwę użytkownika i e-mail lokalnie w folderze za pomocą git, usuwając -gflagę polecenia config:

git config user.name her_username
git config user.email her_email

Alternatywnie, jeśli przepchniesz httpsprotokół, Github za każdym razem zapyta o nazwę użytkownika / hasło (chyba że używasz menedżera haseł).

Simon Boudrias
źródło
6
O ile pamiętam, klucze SSH muszą być unikalne na Githubie, nie możesz mieć tego samego klucza dołączonego do wielu kont
Gareth
@Gareth Może, ale możesz ustawić wiele kluczy SSH dla tego samego użytkownika w systemie Windows (i wszędzie tam, gdzie znam).
Simon Boudrias
nie mogę mieć dwóch kluczy, zobacz moją odpowiedź poniżej.
chovy
1
Dla każdego projektu:git config --global user.name "Mona Lisa"
w3spi
236

To zadziałało dla mnie, zapyta o nazwę użytkownika i hasło

git config --local credential.helper ""
git push origin master
manewrowy
źródło
1
Dzięki, zadziałało dla mnie, użyłem bitbucket i skonfigurowałem moją nazwę użytkownika, ale to rozwiązało migrację do aws code-commit
Alejandro Ruiz
Miałem helper = cache --timeout=999999ustawione na moim .gitignorei to działało. Ale jakikolwiek sposób, aby zresetować to bez zmiany lokalnej konfiguracji, zastanawiam się?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
To jest niesamowite!
hargun3045
To jest to, czego szukałem !!!
aagjalpankaj
1
Lepiej wyjaśnij, co robi tutaj: konfiguruje lokalne repozytorium tak, aby ignorowało skonfigurowane (prawdopodobnie globalnie) credential.helper, np. Magazyn poświadczeń systemu Windows. Oznacza to również, że prosi o nazwę użytkownika / hasło za każdym razem, gdy tego potrzebuje, ponieważ nic nie jest skonfigurowane, więc może możesz credential.helperzamiast tego skonfigurować pamięć podręczną (patrz odpowiedź @Ciro Santilli) lub użyć innej odpowiedzi tutaj.
rugk
52

Możesz pushować używając innego konta. Na przykład, jeśli Twoje konto to A, które jest przechowywane w .gitconfig i chcesz użyć konta B, które jest właścicielem repozytorium, które chcesz przekazać.

Konto B : B_user_name, B_password
Przykład linku SSH: https://github.com/B_user_name/project.git

Push z kontem B to:

$ git push https://'B_user_name':'B_password'@github.com/B_user_name/project.git

Aby zobaczyć konto w .gitconfig

  1. $git config --global --list
  2. $git config --global -e (aby zmienić konto również)
thotruong
źródło
Wow, to jest odpowiedź !! Mam ustawiony user.name, user.emailw lokalnej konfiguracji, mam sklonowany z nazwą użytkownika, a nie pracuje; teraz ostatnia odpowiedź działa bez dotykania pęku kluczy / czegokolwiek ... w Git 2.9.0 in Windows. „w końcu, ale nie najmniej”… tak to się nazywa. Dziękuję Ci. Ta odpowiedź zasługuje na więcej głosów.
WesternGun
3
Jedynym efektem ubocznym jest to, że twoje hasło / nazwa użytkownika jest zapisywane w historii basha. Ale to działa dla mnie.
WesternGun
Dziękuję za to, właśnie to chciałem zrobić. To jednak zmusza do opanowania. Jak mógłbym naciskać na gałąź oprócz mistrza?
Steven Anderson
2
@WesternGun Nie podawaj hasła w adresie URL, jeśli chcesz zapobiec rejestrowaniu go w historii basha. Użyj https://'B_user_name'@github.com/B_user_name/project.git. Powinno to spowodować wyświetlenie monitu o hasło B_user_name.
subtleseeker
24

Konfiguruję alias ssh przy użyciu niestandardowego IdentityFilei przepisuję źródło, aby używać mojej niestandardowej me-githubnazwy hosta.

#when prompted enter `id_rsa_user1` as filename
ssh-keygen -t rsa

# ~/.ssh/config
Host user1-github
HostName github.com
Port 22
User git
IdentityFile ~/.ssh/id_rsa_user1

#check original remote origin url
git remote -v
origin [email protected]:user1/my-repo.git

#change it to use your custom `user1-github` hostname
git remote rm origin
git remote add origin git@user1-github:user1/my-repo.git
chovy
źródło
5
Zamiast usuwać, a następnie dodawać, możemy zmienić zdalny adres URL przez: git remote set-url origin git@user1-github:user1/my-repo.git 😊
Ninh Pham
18

Jeśli używasz adresu URL SSH ( [email protected]:username/projectname.git) zamiast adresu URL HTTPS, możesz tymczasowo określić inny klucz SSH za pomocą $GIT_SSH_COMMANDzmiennej środowiskowej:

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

O ile wiem, w przypadku adresów URL SSH, GitHub nie dba o nazwy użytkowników, tylko o klucze: jeśli konto użytkownika ma dostęp do repozytorium, a to konto ma klucz SSH (patrz strona kluczy SSH na koncie settings), to jeśli użyjesz tego klucza SSH do wypychania do tego repozytorium, wypychanie będzie traktowane jako pochodzące od tego użytkownika.

David Moles
źródło
1
to nie zadziałało dla mnie, co ciekawe, zmiana user.namei user.emailin git configzmieni konto, z którym związane jest zatwierdzenie
Kevin Zhao
U mnie to zadziałało. Tylko mały komentarz, aby odpowiedź była bardziej zrozumiała. „different_private_key” to plik na hoście A, który zawiera klucz prywatny użytkownika B, w imieniu którego chcemy wykonać „git push” na hoście A będącym użytkownikiem A. Musisz utworzyć ten plik na hoście A (na przykład jako ~ / .ssh / id_rsa_userB) i umieścić tam zawartość pliku ~ / .ssh / id_rsa z hostaB, gdzie istnieje użytkownikB. Nie ma nawet znaczenia, czy użytkownik B istnieje, czy nie istnieje na hoście A.
Alexander Samoylov
15

Jeśli po uruchomieniu git pushGit prosi o hasło user, ale chcesz wypchnąć jako new_user, możesz użyć git config remote.origin.url:

$ git push
[email protected]:either/branch/or/path's password:

W tym momencie użyj, ^Caby wyjść git pushi użyj follow, aby nacisnąć jako new_user.

$ git config remote.origin.url
[email protected]:either/branch/or/path

$ git config remote.origin.url [email protected]:either/branch/or/path

$ git push
[email protected]:either/branch/or/path's password:
Łukasz Czerwinski
źródło
Witam, próbowałem tego rozwiązania wcisnąć do skrytki atlaskiej. Pojawia się błąd „<URL> / info / refs not found: czy uruchomiłeś git update-server-info na serwerze?” Nie sądzę, żebym mógł uruchamiać polecenia na Stash. Masz pomysł, jak to rozwiązać? Dzięki!
Zsolt Szilagyi,
Dla GitHub wyglądałoby to następująco:git config remote.origin.url https://[email protected]/different_user/repo.git
NumesSanguis
13

To proste podczas klonowania, weź adres URL git ze swoją nazwą użytkownika, a po zatwierdzeniu zapyta o nowe hasło użytkownika.

Na przykład:

git clone https: // [email protected]/nazwa_uzytkownika/nazwa_reponatora.git

git clone https: //[email protected]/username/reponame.git

Krishnamoorthy Acharya
źródło
4
Ta odpowiedź powinna mieć przynajmniej więcej głosów za. Jeśli nie zrobisz tak, jak mówi @Krishna Kavoor, zawsze będziesz mieć problem, ponieważ chociaż globalnie masz nazwę użytkownika1, a lokalnie nazwę użytkownika2, git spróbuje użyć nazwy globalnej.
Markon,
To nie działa. Użyłem go i powiedzieć: fatal: repo not found.
WesternGun
1
To działa zawsze, ponieważ mam 3 różne projekty od 3 różnych klientów, działa jak cud, sprawdź, czy ścieżka repozytorium jest poprawna.
Krishnamoorthy Acharya,
7

jeśli to jest twój problem

remote: Permission to username1/repo.git denied to username2.
fatal: unable to access 'https://github.com/username1/repo.git/':
The requested URL returned error: 403

Oprócz zmiany nazwy użytkownika i adresu e-mail z terminala za pomocą git config:

$ git config --global user.name "Bob"
$ git config --global user.email "[email protected]"

musisz usunąć informacje autoryzacyjne z pęku kluczy. Zrozumienie tego rozwiązania zajęło mi kilka godzin, okazało się, że mam również certyfikat w swoim pęku kluczy.

Otwórz dostęp do pęku kluczy, kliknij Wszystkie elementy i wyszukaj git. Usuń cały pęk kluczy

Muyide Ibukun
źródło
Jaki jest odpowiednik pęku kluczy w systemie Windows 7?
Thomas Eyde
Nie jestem pewien, ale się dowie
Muyide Ibukun
Myślę, że ja też tu utknąłem. Dowiedziałeś się?
Sandeepan Nath
Nie, w końcu się nie dowiedziałem, ale zgaduję, że nie powinno to być takie trudne
Muyide Ibukun
1
dzięki za sugestię dotyczącą usunięcia informacji autoryzacyjnych z pęku kluczy
Luja Shrestha
7

Używałem jednej maszyny do przesyłania kodu do dwóch różnych kont GitHub z różnymi nazwami użytkownika. Zakładając, że masz już skonfigurowane jedno konto i chcesz dodać nowe:

  1. Wygeneruj nowy klucz SSH ssh-keygen -t rsa -C "[email protected]"
  2. Zapisz go, ale pamiętaj, aby nie zastępować istniejącego id_rsa . Nadaj mu inną nazwę, npid_rsa_another
  3. Skopiuj zawartość klucza na swoje konto GitHub:

Ustawienia -> Klucze SSH i GPG -> Nowy klucz SSH -> Podaj etykietę i wklej klucz -> Dodaj klucz SSH

  1. Dodaj klucz do agenta ssh: ssh-add ~/.ssh/id_rsa_another
  2. Skonfiguruj hosta GitHub: utwórz plik konfiguracyjny za pomocą touch ~/.ssh/configi edytuj plik, dostarczając konfiguracje do swoich kont:
#first account
Host github.com-first
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa

#another account
Host github.com-another
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_another

Teraz powinieneś być w stanie push z różnych kont w zależności od tego, jaki klucz dodasz do agenta ssh, tj. Aby użyć swojego pierwszego konta, zrób ssh-add ~/.ssh/id_rsa .

Możesz również zmienić adres e-mail użytkownika:

git config --global user.email "[email protected]"

lub wyczyść klucze ssh w przypadku błędu uprawnień podczas wysyłania kodu na jedno z kont:

ssh-add -D

Tomasz Bartkowiak
źródło
1
Tak, mam już ustawione jako wiele kont. Ale jak mogę pchać z pierwszym kontem. Czy możesz podzielić się poleceniem?
codemicky
Co masz na myśli mówiąc „jak mogę naciskać”? Nie git pushdziała? Po dodaniu klucza powinieneś móc pchnąć
Tomasz Bartkowiak
Powinieneś ustawić użytkownika dla każdego projektu repozytorium $ git config user.email
jasmintmp
6

Idź do Credential Manager Idź do Windows Credentials Usuń wpisy w Generic Credentials Spróbuj połączyć się ponownie.

Deepak
źródło
Dzięki. Ścieżka to Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials.
Saheed
4

Jak wspomniano wcześniej, możesz użyć

git config user.name her_username
git config user.email her_email

aby ręcznie ustawić nazwę użytkownika i adres e-mail dla pojedynczego repozytorium, ale musisz dodać to polecenie:

git commit --amend --reset-author

jeśli już próbowałeś naciskać przed zmianą. W przeciwnym razie zmiany nie pojawią się w pliku konfiguracyjnym.

Martin819
źródło
To nie jest prawda. --reset-author(Z --...) położy ostatnią skonfigurowaną nazwę / e-mail na ostatni popełnienia, a także najnowszy znacznik czasu. Nie wpływa na zmiany w pliku konfiguracyjnym.
Ramon Snir
3

Możesz dodać nowy zdalny adres URL dla innej nazwy użytkownika za pomocą git remote add origin-username https://[email protected]/repository_name.git

Po tym, jeśli będziesz naciskać używając git push -u origin-username master, pojawi się monit o podanie hasła.

Raman Singh
źródło
2

git config nazwa.użytkownika zmienia tylko nazwę, którą zatwierdzam. Nadal nie mogę naciskać. Tak to rozwiązałem i myślę, że jest to dla mnie łatwa droga.

  1. Wygeneruj klucz SSH pod nazwą użytkownika, którą chcesz wypchnąć na komputerze, którego będziesz używać https://help.github.com/articles/connecting-to-github-with-ssh/

  2. Dodaj ten klucz do konta użytkownika github, na które chcesz wysłać https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

  3. Wybierz klonowanie za pomocą SSH

Możesz teraz wepchnąć jako ten użytkownik do tego repozytorium.

Yang Fang
źródło
2

Jeśli w systemie Windows i użytkownik Git for Windows i managerdo zarządzania poświadczeniami (inaczej Git-Credential-Manager-for-Windows Link ), problem polega na tym, że nie ma łatwego sposobu przełączania się między użytkownikami podczas wypychania do GitHub za httpspomocąOAuth tokenów.

Powodem jest to, że token jest przechowywany jako:

  • Adres internetowy: git:https://github.com
  • Nazwa Użytkownika: Personal Access Token
  • Hasło: OAuth_Token

Odmiany adresu URL w programie Internet Addressnie działają, na przykład:

Rozwiązanie: przestrzenie nazw . Można to znaleźć w szczegółach konfiguracji Git-Credential-Manager-for-Windows:

Cytując z tego:

przestrzeń nazw

Ustawia przestrzeń nazw dla przechowywanych poświadczeń.

Domyślnie GCM używa przestrzeni nazw „git” dla wszystkich przechowywanych danych logowania, ustawienie tej wartości konfiguracyjnej umożliwia kontrolowanie przestrzeni nazw używanej globalnie lub dla każdego hosta.

git config --global credential.namespace name

Teraz zapisz swoje poświadczenia w Menedżerze poświadczeń systemu Windows jako:

  • Adres internetowy: git.username:https://github.com
  • Nazwa Użytkownika: Personal Access Token
  • Hasło: OAuth_Token

Zauważ, że zmieniliśmy: git-> git.username(gdzie zmieniaszusername swoją rzeczywistą nazwę użytkownika lub ze względu na to, na cokolwiek chcesz jako unikalny identyfikator)

Teraz w repozytorium, w którym chcesz użyć określonego wpisu, wykonaj:

git config credential.namespace git.username

(Ponownie ... zastąp usernameżądaną wartością)

Twoja .git/configwola będzie teraz zawierać:

[credential]
    namespace = git.username

Zrobione! Właściwe dane uwierzytelniające zostaną pobrane ze sklepu poświadczeń systemu Windows.

To oczywiście nie zmienia, który użytkownik / e-mail przesyła. W tym celu musisz skonfigurować zwykłe user.nameiuser.email

mementum
źródło
Dziękuję Ci. To działało najlepiej dla mnie (Windows 10). Żadnego tymczasowego usuwania innych kont użytkowników git w poświadczeniach systemu Windows, żadnych „hacków”. Mam jednego użytkownika git globalnego / hosta dla wszystkich repozytoriów. Tyle że tylko jeden z nich wymaga innych poświadczeń. Jeśli to również pasuje do twojego środowiska, po prostu zostaw wszystko tak, jak jest w poświadczeniach systemu Windows, przejdź do swojego „specjalnego” repozytorium i wpisz git config credential.namespace git.usernamejak wspomniano (zastępując nazwę użytkownika). Jeśli następnym razem pchniesz, git poprosi Cię o podanie nowych danych logowania dla nazwy użytkownika.
ford04
2

Nie mogłem wymyślić, jak mieć drugą tożsamość na githubie na jednym komputerze (żadna z tych odpowiedzi nie zadziałała w moim przypadku), ale wymyśliłem, jak mogę naciskać na wiele różnych kont github, tak jak ja.

Wypchnij tę samą nazwę użytkownika, ale na różne konta github

  1. Skonfiguruj drugi klucz SSH (w ten sposób ) dla swojego drugiego konta github

  2. Zmiana między kontami w ten sposób:

Wciśnij moje nowe drugie konto na githubie

ssh-add -D
ssh-add ~/.ssh/ssh_key_for_my_2nd_account
git push

Push z moim głównym kontem

ssh-add -D
ssh-add ~/.ssh/id_rsa   
git push
kris
źródło
1

Jeśli masz https://desktop.github.com/
, możesz przejść do Preferencji (lub Opcje) -> Konta,
a następnie wylogować się i zalogować.

Szczery Abe
źródło
Nie ma menu Preferencje?
Thomas Eyde
@ThomasEyde Jest na macOS. To „Opcje” w systemie Windows.
Honest Abe
0

Identyfikator użytkownika, w którym następuje zatwierdzenie, jest przechowywany w pliku konfiguracyjnym.

przejdź na górę repozytorium vi .git / config

zmień linię adresu URL wymienioną po „[zdalne” źródło ”], aby miała odpowiedni identyfikator użytkownika

wainCam
źródło
0

Jeśli używasz ssh i pobierz

Pozwolenie na some_username / repository.git odmówiono Alice_username

chociaż nie chcesz push jako Alice_username, upewnij się, że Alice_username nie ma klucza ssh twojego komputera dodanego do konta github.

Usunąłem klucz SSH z konta Alice na githubie i funkcja push działała.

Achraf Amil
źródło