Як я натискаю на GitHub під іншим ім'ям користувача?


156

Друг і я діляться моїм комп’ютером. Я натискав на GitHub за допомогою оболонки git bash в Windows 7. Зараз ми знаходимося в іншому проекті на цьому комп’ютері, і мені потрібно, щоб вона перейшла до свого облікового запису. Але вона намагається використовувати моє ім’я користувача і говорити, що я не маю доступу до її сховища:

$ 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

Чи допомагає це допомогти.github.com/ articles/setting-your-email-in-git (використання git config --global user.name her_username) перед натисканням
Prinzhorn

Я бачу, що ви перейшли на URL-адреси HTTPS, тому github завжди вимагає отримати облікові дані. Пам'ятайте лише, що комісії все ще будуть записані так, як це робиться користувачем у git config user.name та git config user.email незалежно від того, хто насправді робить натиск. ps Я не думаю, що існує історія того, хто що штовхнув.
Хорхе Орпінель

29
git config --local credential.helper ""може зробити трюк.
SOFe

Я не міг дотримуватися жодного з рішень, наведених тут у моїй системі Windows. Кроки, наведені у цій відповіді, спрацювали, нарешті, stackoverflow.com/a/15382950/351903
Sandeepan Nath

@SOFe - це те, що я шукав! Чи ефективно ця команда стирає деякі кешовані облікові дані?
CCJ

Відповіді:


93

Якщо ви користуєтесь іншим користувачем Windows, ваш SSH-ключ та налаштування git будуть незалежними.

Якщо це не варіант для вас, ваш друг повинен додати ваш ключ SSH до її облікового запису Github.

Хоча, попереднє рішення змусить вас наполягати як на себе, але це дозволить вам підштовхнути її репо. Якщо ви цього не хочете і працюєте в іншій папці на одному ПК, ви можете налаштувати ім’я користувача та електронну пошту локально всередині папки з git, видаливши -gпрапор команди config:

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

Крім того, якщо ви перейдете на httpsпротокол, Github буде щоразу підказувати ім’я користувача / пароль (якщо ви не використовуєте менеджер паролів).


6
Наскільки я пам’ятаю, ключі SSH повинні бути унікальними на Github, ви не можете мати один і той же ключ, приєднаний до кількох облікових записів
Гарет

@Gareth Можливо, але ви можете встановити кілька ключів SSH для одного і того ж користувача у Windows (і всюди, де я знаю).
Саймон Будріас

не може мати дві клавіші, дивіться мою відповідь нижче.
chovy

1
Для кожного проекту:git config --global user.name "Mona Lisa"
w3spi

236

Це працювало для мене, підкаже ім'я користувача та пароль

git config --local credential.helper ""
git push origin master

1
Дякую, він працював для мене, я використовував бітбукет, і я налаштував своє ім’я користувача, але це вирішило міграцію до Aws кодового фіксації
Алехандро Руїс

Я helper = cache --timeout=999999налаштувався на своє, .gitignoreі це спрацювало. Але будь-який спосіб скинути це, не змінюючи локальну конфігурацію, мені цікаво?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Це дивно!
hargun3045

Це те, що я шукав !!!
aagjalpankaj

1
Краще поясніть, що тут робиться: він налаштовує ваше локальне репо, щоб ігнорувати (можливо, глобально) налаштований credential.helper, наприклад, сховище даних облікових записів Windows. Це також означає, що він запитує ім'я користувача / пароль кожен раз, коли він потрібен, оскільки нічого не налаштовано, тому, можливо, ви можете також налаштувати credential.helperкеш-пам’ять (див. Відповідь @Ciro Santilli) або використати іншу відповідь тут.
rugk

52

Ви можете натиснути за допомогою іншого облікового запису. Наприклад, якщо ваш рахунок є A, який зберігається у .gitconfig, і ви хочете використовувати обліковий запис B, який є власником репо, який ви хочете натиснути.

Рахунок B : B_user_name, B_password
Приклад посилання SSH: https://github.com/B_user_name/project.git

Поштовх с рахунок B :

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

Щоб побачити обліковий запис у .gitconfig

  1. $git config --global --list
  2. $git config --global -e (щоб також змінити рахунок)

Ух, це відповідь !! Я встановив user.name, що user.emailв локальній конфігурації я клонував з ім'ям користувача, і не працює; тепер остання відповідь працює, не торкаючись брелок / що завгодно ... дюйма Git 2.9.0 in Windows. "нарешті, але не в останню чергу" .. так воно і називається. Дякую. Ця відповідь заслуговує на більшу підтримку.
WesternGun

3
Єдиним побічним ефектом є те, що ваш пароль / ім’я користувача записано в історії баш .. Але це працює для мене.
WesternGun

Дякую за це, саме це я хотів зробити. Це все ж підштовхує до оволодіння. Як би я підштовхнувся до гілки крім майстра?
Стівен Андерсон

2
@WesternGun Не вводьте пароль у URL-адресі, якщо ви хочете запобігти його запису в історію баш. Використовуйте https://'B_user_name'@github.com/B_user_name/project.git. Це повинно запропонувати пароль для B_user_name.
subtleseeker

24

Я встановлюю псевдонім ssh за допомогою спеціального IdentityFileі переписав походження, щоб використовувати моє власне me-githubім’я хоста.

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

5
Замість того, щоб видалити, потім додати, ми можемо змінити віддалений URL за адресою: git remote set-url origin git@user1-github:user1/my-repo.git 😊
Ninh Pham

18

Якщо ви використовуєте SSH URL ( git@github.com:username/projectname.git), а не HTTPS URL, ви можете тимчасово вказати інший ключ SSH за допомогою $GIT_SSH_COMMANDзмінної середовища:

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

Наскільки я можу сказати, що з URL-адресами SSH, GitHub не переймається іменами користувачів, а лише клавішами: якщо обліковий запис користувача має доступ до сховища, а в цьому обліковому записі є ключ SSH (див. Сторінку ключів SSH в обліковому записі налаштування), то якщо ви використовуєте цю клавішу SSH для переходу до цього сховища, натискання вважатиметься таким, що надходить від цього користувача.


1
це не спрацювало для мене, що цікаво, зміна user.nameта user.emailв git configзмінить рахунок, з яким пов’язана
Кевін Чжао

Це працювало для мене. Лише невеликий коментар, щоб зробити відповідь більш зрозумілою. "different_private_key" - це файл на hostA, який містить приватний ключ користувачаBB, від імені якого ми хочемо виконати "git push" на хостіA, що є userA. Ви повинні створити цей файл на хостіAA (наприклад, як ~ / .ssh / id_rsa_userB) і помістити туди вміст файла ~ / .ssh / id_rsa з hostB, де існує userB. Навіть не має значення, чи існує userB або не існує на хостіA.
Олександр Самойлов

15

Якщо після запуску git pushGit запитує пароль user, але ви хочете натиснути як new_user, ви можете скористатися git config remote.origin.url:

$ git push
user@my.host.com:either/branch/or/path's password:

У цей момент використовуйте ^Cдля того, щоб вийти, git pushа потім натисніть "Як" new_user.

$ git config remote.origin.url
user@my.host.com:either/branch/or/path

$ git config remote.origin.url new_user@my.host.com:either/branch/or/path

$ git push
new_user@my.host.com:either/branch/or/path's password:

Привіт, я спробував це рішення підштовхнути до сховища атласа. Я отримую помилку "<URL> / info / refs не знайдено: ти запустив git update-server-info на сервері?" Я не думаю, що я можу запускати команди на Stash. У вас є ідея, як це вирішити? Дякую!
Zsolt Szilagyi

Для GitHub це виглядатиме так:git config remote.origin.url https://different_user@github.com/different_user/repo.git
NumesSanguis

13

Під час клонування це просто, будь-ласка, візьміть URL-адресу git із своїм іменем користувача. Під час вчинення він запитає ваш новий пароль користувача.

Наприклад:

git clone https: //username@github.com/username/reponame.git

git clone https: //username@bitbucket.org/username/reponame.git


4
Ця відповідь повинна мати хоча б більше результатів. Якщо ви не зробите так, як каже @Krishna Kavoor, у вас завжди буде проблема, оскільки, хоча у глобальному масштабі у вас є ім'я користувача1, а локально у вас є ім'я користувача2, git намагатиметься використовувати глобальне ім’я.
Маркон

Це не працює. Я використовував його , і він сказав: fatal: repo not found.
WesternGun

1
Він працює завжди Оскільки у мене є 3 різні проекти від 3 різних клієнтів. Він працює як диво. Перевірте, чи правильно виконаний шлях репо.
Крішнаморті Ахарія

7

якщо це ваша проблема

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

На додаток до зміни імені користувача та електронної пошти з терміналу за допомогою git config:

$ git config --global user.name "Bob"
$ git config --global user.email "bob@example.com"

вам потрібно буде видалити інформацію про авторизацію з Keychain. На це рішення знадобилося кілька годин, щоб розібратися. Я виявив, що я також маю сертифікат у своєму брелоку.

Відкрийте доступ до брелка, натисніть Усі елементи та шукайте git. Видалити всю брелок


Який аналог Windows 7 Keychain?
Thomas Eyde

Не впевнений, але дізнаємось
Муїде Ібукун

Я думаю, я і тут застряг. Ви дізналися?
Сандепіан Нат

Ні, не врешті-решт з’ясували, але
гадаю,

1
дякую за пропозицію щодо видалення інформації про авторизацію з Keychain
Luja Shrestha

7

Я використовую одну машину, щоб надіслати код на два різні облікові записи GitHub з різними іменами користувача. Припустимо, що ви вже створили один обліковий запис і хочете додати новий:

  1. Створіть новий ключ SSH ssh-keygen -t rsa -C "myaddress@example.com"
  2. Збережіть це, але пам’ятайте, щоб не перекривати існуючий id_rsa. Дайте йому іншу назву, наприкладid_rsa_another
  3. Скопіюйте вміст ключа у свій обліковий запис GitHub:

Налаштування -> Ключі SSH та GPG -> Нова клавіша SSH -> Дайте мітку та вставте ключ -> Додати ключ SSH

  1. Додайте ключ до агента ssh: ssh-add ~/.ssh/id_rsa_another
  2. Налаштування хоста GitHub: Створіть конфігураційний файл touch ~/.ssh/configі відредагуйте файл, надавши конфігурації для своїх облікових записів:
#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

Тепер ви повинні мати можливість переходити з різних облікових записів залежно від того, який ключ ви додаєте до агента ssh, тобто використовувати свій перший обліковий запис ssh-add ~/.ssh/id_rsa.

Ви також можете змінити електронну пошту користувача:

git config --global user.email "myaddress@example.com"

або очистити ключі ssh у випадку помилки дозволу при натисканні коду на один із облікових записів:

ssh-add -D


1
Так, я вже встановив кілька облікових записів. Але як я можу натиснути з першого рахунку. Чи можете ви поділитися командою?
codemicky

Що ви маєте на увазі під "як я можу натиснути"? Хто git pushне працює? Ви можете мати можливість натиснути після додавання ключа
Томаш Бартковяк

Ви повинні встановити користувача для кожного репо-проекту $ git config user.email
jasmintmp

6

Перейдіть до диспетчера сертифікатів Перейдіть до облікових даних Windows Видаліть записи в розділі Загальні облікові дані Спробуйте підключитися ще раз.


Дякую. Шлях Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials.
Сахед

4

Як було сказано раніше, ви можете використовувати

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

щоб вручну встановити ім'я користувача та електронну пошту для одного репо, але ви повинні додати цю команду:

git commit --amend --reset-author

якщо ви вже намагалися натиснути перед зміною. Інакше зміни не відображаються у конфігураційному файлі.


Це не правда. --reset-author--...) поставить останню конфігурований ім'я / електронної пошти на останній фіксації, а також останню мітку часу. Це не впливає на зміни у конфігураційному файлі.
Рамон Снір

3

Ви можете додати нову віддалену URL-адресу для іншого імені користувача, використовуючи git remote add origin-username https://username@github.expedia.biz/repository_name.git

Після цього, якщо ви натиснете git push -u origin-username master, це допоможе вам ввести пароль.


2

git config user.name змінює лише ім'я, яке я виконую. Я все ще не можу натиснути. Ось як я це вирішив, і, думаю, це легкий шлях до мене.

  1. Створіть ключ SSH під ім'ям користувача, яке ви хочете натиснути на комп'ютер, ви будете використовувати https://help.github.com/articles/connecting-to-github-with-ssh/

  2. Додайте цей ключ до облікового запису користувача github, який потрібно перейти на сторінку https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

  3. Виберіть Клонувати SSH

Ви можете натиснути, як цей користувач, до цього репо.


2

Якщо під Windows та користувачем Git для Windows та managerуправління обліковими записами (також Git-Credential-Manager-for-Windows Link ) проблема полягає в тому, що немає простого способу перемикання між користувачами при натисканні на GitHub за httpsдопомогоюOAuth маркерів.

Причина полягає в тому, що маркер зберігається як:

  • Інтернет-адреса: git:https://github.com
  • Ім'я користувача: Personal Access Token
  • Пароль: OAuth_Token

Варіанти URL-адреси Internet Addressне працюють, наприклад:

  • git:https://username@github.com
  • git:https://github.com/username
  • ...

Рішення: простори імен . Це можна знайти в деталях конфігурації Git-Credential-Manager-for-Windows:

Цитуючи його:

простір імен

Встановлює простір імен для збережених облікових даних.

За замовчуванням GCM використовує простір імен 'git' для всіх збережених облікових даних, встановлення цього значення конфігурації дозволяє контролювати простір імен, використовуваний у всьому світі, або на хост.

git config --global credential.namespace name

Тепер зберігайте свої дані в Менеджері облікових даних Windows як:

  • Інтернет-адреса: git.username:https://github.com
  • Ім'я користувача: Personal Access Token
  • Пароль: OAuth_Token

Зауважте, що ми змінили: git-> git.username(де ви змінюєте usernameвласне ім'я користувача або заради нього, на все, що ви хочете, як унікальний ідентифікатор)

Тепер у сховищі, де ви хочете використовувати конкретний запис, виконайте:

git config credential.namespace git.username

(Знову ж таки ... замініть usernameна бажане значення)

Тепер ваш .git/configвміст буде містити:

[credential]
    namespace = git.username

Et voilá! Правий обліковий запис буде витягнутий з магазину довіри Windows.

Це, звичайно, не змінює того, кого користувач / електронна пошта натискає. Для цього вам потрібно налаштувати звичайні user.nameтаuser.email


Дякую. Це найкраще працювало для мене (Windows 10). Ніякого тимчасового видалення інших облікових записів користувачів git в Windows Credentials, жодних "хакерів". У мене є один глобальний / хост-користувач git для всіх сховищ. За винятком лише одного з них потрібні різні облікові дані. Якщо це також відповідає вашому середовищу, просто залиште все, як є у облікових даних Windows, перейдіть до вашого "спеціального" сховища та введіть, git config credential.namespace git.usernameяк було зазначено (замінюючи ім'я користувача). Якщо ви натиснете наступного разу, git попросить вас про нові облікові дані для імені користувача.
ford04

2

Я не міг зрозуміти, як на одній машині мати ідентифікацію 2-го github (жодна з цих відповідей для мене не працювала), але я зрозумів, як я можу перейти до декількох різних облікових записів github як я.

Натисніть як те саме ім’я користувача, але до різних облікових записів github

  1. Налаштуйте 2-й ключ SSH ( так ) для свого 2-го облікового запису github

  2. Перехід між обліковими записами таким чином:

Надішліть з моїм новим другим обліковим записом github

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

Надіслати з мого основного рахунку

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


0

Userid, де відбувається фіксація, зберігається у конфігураційному файлі.

перейти до верхньої частини сховища vi .git / config

змінити рядок URL, вказаний після "[віддаленого" походження "], щоб мати відповідний користувальницький текст


0

Якщо ви використовуєте ssh і отримуйте

Дозвіл до some_username / repository.git відхилено Alice_username

поки ви не хочете натискати як Alice_username, переконайтесь, що Alice_username не містить ключ ssh вашого комп’ютера, доданий до свого облікового запису github.

Я видалив свій ssh ​​ключ із облікового запису github Аліси, і натискання спрацювало.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.