Как мне нажать на GitHub под другим именем пользователя?

158

Я и мой друг делимся своим компьютером. Я сделал толчок для 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
в.
источник
Помогает ли это help.github.com/articles/setting-your-email-in-git (использовать git config --global user.name her_username) до нажатия
Prinzhorn
Я вижу, вы переключились на HTTPS URL, поэтому github всегда запрашивает учетные данные. Просто помните, что коммиты будут по-прежнему записываться, как пользователь, в git config user.name и git config user.email независимо от того, кто на самом деле выполняет push. PS Я не думаю, что есть история того, кто что толкнул.
Хорхе Орпинель,
29
git config --local credential.helper ""может сделать свое дело.
SOFe
Я не мог следовать ни одному из решений, приведенных здесь в моей системе Windows. Шаги, приведенные в этом ответе, наконец-то сработали stackoverflow.com/a/15382950/351903
Сандипан Нат
@ SOFe это то, что я искал! Эта команда эффективно стирает некоторые кэшированные учетные данные?
CCJ

Ответы:

94

Если вы используете другого пользователя 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 (и везде, где я знаю).
Саймон Будриас
не может быть двух ключей, смотрите мой ответ ниже.
Чови
1
Для каждого проекта:git config --global user.name "Mona Lisa"
w3spi
239

Это сработало для меня, он будет запрашивать имя пользователя и пароль

git config --local credential.helper ""
git push origin master
s-охотник
источник
1
Спасибо, это сработало для меня, я использовал bitbucket и настроил свое имя пользователя, но это решило переход на aws code-commit
Alejandro Ruiz
Я helper = cache --timeout=999999настроился на это, .gitignoreи это сработало. Но какой-нибудь способ сбросить это без изменения локального конфига мне интересно?
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
Это потрясающе!
hargun3045
Это то, что я искал !!!
aagjalpankaj
1
Лучше объясните, что он делает здесь: он настраивает ваше локальное хранилище, чтобы игнорировать (вероятно, глобально) настроенное credential.helper, например, хранилище учетных данных Windows. Это также означает, что он запрашивает имя пользователя / пароль каждый раз, когда ему это нужно, поскольку ничего не настроено, поэтому, возможно, вы также можете credential.helperвместо этого настроить кэширование (см. Ответ @Ciro Santilli) или использовать другой ответ здесь.
rugk
53

Вы можете нажать с использованием другой учетной записи. Например, если ваша учетная запись 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 (также изменить аккаунт)
thotruong
источник
Вау, это ответ !! Я установил user.name, user.emailв локальной конфигурации, я клонировал с именем пользователя, и не работает; Теперь последний ответ работает, не касаясь связки ключей / что угодно ... в Git 2.9.0 in Windows. «наконец, но не в последнюю очередь» .. это то, что он называется. Спасибо. Этот ответ заслуживает большего количества голосов.
WesternGun
3
Единственным побочным эффектом является то, что ваш пароль / имя пользователя записывается в истории Bash. Но это работает для меня.
WesternGun
Спасибо за это, это именно то, что я хотел сделать. Это подталкивает к освоению, хотя. Как бы я подтолкнул к ветке помимо мастера?
Стивен Андерсон
2
@WesternGun Не указывайте пароль в URL, если вы хотите предотвратить его запись в истории Bash. Использование https://'B_user_name'@github.com/B_user_name/project.git. Это должно запросить пароль B_user_name.
искатель
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
chovy
источник
5
Вместо удаления, а затем добавления, мы можем изменить удаленный URL-адрес следующим образом: git remote set-url origin git@user1-github:user1/my-repo.git N
Фам
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 для отправки в этот репозиторий, push будет рассматриваться как исходящий от этого пользователя.

Дэвид Моулз
источник
1
это не работает для меня, интересно, изменения user.nameи user.emailв git configизменит учетную запись, коммят связана
Кевин Чжао
Это сработало для меня. Просто небольшой комментарий, чтобы сделать ответ более ясным. «Different_private_key» - это файл на hostA, который содержит закрытый ключ userB, от имени которого мы хотим выполнить «git push» на hostA, являющемся userA. Вы должны создать этот файл на hostA (например, как ~ / .ssh / id_rsa_userB) и поместить туда содержимое файла ~ / .ssh / id_rsa из hostB, где существует userB. Даже не имеет значения, существует ли userB или не существует на hostA.
Александр Самойлов
15

Если после запуска git pushGit запрашивает пароль user, но вы хотите нажать as 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:
Лукаш Червинский
источник
Здравствуйте, я попытался это решение подтолкнуть к Atlassian тайник. Я получаю сообщение об ошибке "<URL> / info / refs not found: вы запустили git update-server-info на сервере?" Я не думаю, что я могу запускать команды на Stash. У вас есть идея, как это решить? Спасибо!
Жолт Силагый
Для 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, у вас всегда будет проблема, потому что, хотя в глобальном масштабе у вас есть username1 и локально у вас username2, git попытается использовать глобальное имя.
Маркон
Это не работает. Я использовал его , и он сказал: fatal: repo not found.
WesternGun
1
Это работает всегда, так как у меня есть 3 разных проекта от 3 разных клиентов. Это работает как чудо. Пожалуйста, проверьте правильность пути репо.
Кришнамурти Ачарья,
8

если это твоя проблема

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, нажмите All Items и найдите git. Удалить всю связку ключей

Муйиде Ибукун
источник
Какой Windows 7 аналог Keychain?
Томас Эйд
Не уверен, но узнаю
Muyide Ibukun
Я думаю, что я застрял здесь тоже. Вы узнали?
Сандипан Нат
Нет, в конце концов не узнал, но я предполагаю, что это не должно быть так сложно
Muyide Ibukun
1
спасибо за предложение об удалении информации авторизации из
Цепочки для
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

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

Martin819
источник
Это неправда. --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

И вуаля! Правильные учетные данные будут извлечены из хранилища учетных данных Windows.

Это, конечно, не меняет, какой пользователь / электронная почта подталкивает. Для этого вам нужно настроить обычный user.nameиuser.email

mementum
источник
Спасибо. Это работало лучше всего для меня (Windows 10). Нет временного удаления учетных записей других пользователей git в учетных данных Windows, нет «хаков». У меня есть один глобальный / хост-пользователь git для всех репозиториев. За исключением того, что только один из них требует различных учетных данных. Если это также соответствует вашей среде, просто оставьте все как есть в учетных данных Windows, перейдите в свой «специальный» репозиторий и введите, git config credential.namespace git.usernameкак уже упоминалось (вместо имени пользователя). Если вы нажмете в следующий раз, git попросит вас ввести новые учетные данные для имени пользователя.
ford04
2

Я не мог понять, как иметь 2-е удостоверение github на одной машине (для меня ни один из этих ответов не сработал), но я выяснил, как я могу использовать несколько разных учетных записей github как я.

Нажмите как то же имя пользователя, но на разные учетные записи GitHub

  1. Установите второй ключ SSH ( например, так ) для своей второй учетной записи на github

  2. Переключаться между аккаунтами так:

Нажмите с моей новой учетной записью 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
крис
источник
2

Выполните следующие шаги:

  1. Вы должны понимать, что вы определяете автора перед совершением! коммиты уже заморожены: у них есть любое имя, установленное для их автора и коммиттера, и их нельзя изменить.
# you can check what's currently:
git config user.name
git config user.email

git config user.name "your_github_username"
git config user.email "your_github_email"

# Again check what's currently:
git config user.name
git config user.email
  1. Проверьте, кому помечен ваш коммит?
git log
# once you're confirmed that it's tagged to you, then you should move to step 3

В случае, если автор не прав, вы можете легко отменить последний коммит без потери изменений

Кроме того, прежде чем перейти к шагу 3, не забудьте выполнить первый шаг для проверки работоспособности.!

  1. предложите ввести github_username и github_password
git config --local credential.helper ""
git push
# it will ask you to enter your github_username and github_password
aakriti
источник
0

Идентификатор пользователя, в котором происходит фиксация, хранится в файле конфигурации.

перейдите в начало репозитория vi .git / config

измените строку URL, указанную после «[remote» origin »], чтобы иметь соответствующий ID пользователя

wainCam
источник
0

Если вы используете SSH и получите

В доступе к какому-либо имени пользователя / repository.git отказано имя пользователя Алисы

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

Я удалил свой ключ ssh из учетной записи Алисы на github, и пуш сработал.

Ахраф Амил
источник