Git отправляет в удаленный репозиторий GitHub как неправильный пользователь

82

У меня есть рабочая учетная запись GitHub и личная. Сначала я использовал личный для тестовых проектов, затем я пошел дальше и создал репозиторий с другой учетной записью на том же компьютере.

Теперь я снова хотел создать новый репозиторий в своей личной учетной записи, я изменил глобальный и локальный user.nameи создал новую пару ключей ssh, введенную на странице настройки GitHub. Затем я настроил каталог

git init
git remote add origin <url>
git push origin

но это теперь говорит мне

ОШИБКА: доступ к personaluser / newrepo.git запрещен

Я понятия не имею, как другая учетная запись связана с этой. .git/configне показывает workusernameсвязанных вещей.

Если вы используете Windows 10, не торопитесь, чтобы прочитать ответ Раджана.

Раз Фаз
источник
1
Для Windows 10 ответьте ниже. Удалите учетные данные из диспетчера учетных данных. Зря потратил 2 часа времени.
xenteros
@xenteros Пожалуйста, опубликуйте это как ответ. Я потерял 1 час, а вы спасли мне еще 1 час.
lexicore

Ответы:

76

это звучит очень похоже на мою текущую работу. кажется, что вы уже настроили свой отдельный файл, ssh-keysпоэтому вам также необходимо создать ~/.ssh/configфайл и заполнить его информацией, подобной этой:

Host work.github.com
    HostName github.com
    User WORK_GITHUB_USERNAME
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_work_rsa
    IdentitiesOnly yes

Host personal.github.com
    HostName github.com
    User PERSONAL_GITHUB_USERNAME 
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_personal_rsa
    IdentitiesOnly yes

Каждое свойство звучит довольно понятно, кроме IdentitiesOnlyодного. Я не буду пытаться объяснять, для чего это нужно, но это в моей текущей настройке и работает нормально.

Также стоит отметить, что Host URLэто всего лишь указатель для получения правильных пользовательских настроек и не влияет на правильное получение файлов по вашему целевому HostNameURL.

Теперь вам просто нужно убедиться, что ваш origin(или любой другой remote) URL-адрес соответствует правильному HostURL-адресу в ваших соответствующих репозиториях в зависимости от вашего имени пользователя. Если у вас уже есть существующие личные репозитории, вы можете отредактировать .git/configфайл этого репо в текстовом редакторе:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@personal.github.com:PERSONAL_GITHUB_USERNAME/project.git

или сделать это через командную строку:

git remote set-url origin git@personal.github.com:PERSONAL_GITHUB_USERNAME/project.git

Как и ваш рабочий:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@work.github.com:your_work_organization/project.git

или снова через командную строку:

git remote set-url origin git@work.github.com:your_work_organization/project.git

Конечно, вы всегда можете указать один из своих HostURL-адресов в своем ~/.ssh/configфайле как

Host github.com

Раньше я только work.github.comдля того, чтобы легче было видеть взаимосвязь конфигурации.

После того, как все они настроены, вы сможете нажимать на каждый соответствующий пульт.

РЕДАКТИРОВАТЬ

Следует отметить, что я только что обнаружил, что если вы когда-нибудь устанавливаете глобальные значения конфигурации git для своих user.email значения (и я предполагаю, user.nameчто также отправит другое значение), git покажет ваши коммиты как этот пользователь электронной почты. Чтобы обойти это, вы можете переопределить глобальные настройки конфигурации git в вашем локальном репозитории:

$ git config user.name "John Doe"
$ git config user.email johndoe@example.com

Теперь он должен отправлять коммиты как правильный пользователь для этого репо.

Хеллатана
источник
3
Работает как шарм. Спасибо!
NorthBridge
1
Этот сайт объясняет конфигурационный файл ssh более полно для всех, кому это интересно.
Фил
3
Наверняка самый полезный ответ. Огромное спасибо.
limp_chimp
Гениально! Спасибо!
Fydo
1
Ключ, которого мне не хватало, - это указание хоста ssh в .git / config - Большое спасибо!
xdotcommer
46

Перейдите в Панель управления> Учетные записи пользователей> Диспетчер учетных данных> Общие учетные данные.

удалите учетные данные git. Затем запустите git push. Будет предложено запросить учетные данные git. Введите свои правильные учетные данные.

Раджан Патил
источник
3
Это решило мою проблему при запуске Git Bash в Windows10. Благодаря @ Rajan-Патил
suspicious_williams
Для тех, у кого нет графического интерфейса Windows на английском языке, вы можете получить доступ к диспетчеру учетных данных, набрав control /name Microsoft.CredentialManagerв командной строке
bgusach
странно, но он отлично работает только тогда, когда я запускаю Git Bash (как упоминалось выше), но если я продолжу использовать тот же терминал, который я начал git pushс ошибкой, он все время выдает одни и те же ошибки, даже после перезапуска терминала. Но все равно спасибо - в итоге это сэкономило мне много времени
Константин Диденко
Это определенно лучший ответ, который я когда-либо встречал. Остальные были запутанными, но это было просто и точно.
клаудекеннилол
Это работает ОДИН РАЗ. После того, как вы снова добавите учетные записи, та же проблема продолжает возникать.
Megakoresh
38

Вы также можете просто переключиться на https, а не на ssh. Если вы используете https, он будет учитывать настройки .git / config. Итак, в .git / config измените:

url = git@github.com:USER/PROJECT.git

к

url = https://USER@github.com/USER/PROJECT.git

(эти значения на странице мерзавца проекта, нажмите на SSHи HTTPкнопке стор Шарля новых значений);

Yuttadhammo
источник
2
+1! Это действительно хорошее решение для выполнения одноразовых отправок с арендованных машин и т. Д., Когда вы не хотите устанавливать закрытые ключи и т. Д.
lambshaanxy
1
Я думаю, что единственная проблема с использованием httpsзаключается в том, что вам нужно вводить user / pass каждый раз, когда вы делаете a push, если только нет какой-то конфигурации git, о которой я не знаю
hellatan
Я знаю, что это очень старый, но СПАСИБО. Моя машина не настроена для ssh, но она все еще пыталась нажать на мою рабочую учетную запись github вместо моей личной для одноразовой отправки. Использовал это в моем .git / config в моем каталоге проектов и работал потрясающе. Ура! Проголосуйте за вас.
Sady
2
имейте в виду, что вы git push https://username:pass@github.com/user/repo.gitтоже можете сделать это ... если вас устраивает passистория вашей оболочки
Платон
Это лучшее решение. Спасибо!
codemicky
33

github идентифицирует вас по ключу ssh, который он видит, а не по какой-либо настройке из git.

Следовательно, вам необходимо убедиться, что ssh-ключ вашей рабочей учетной записи не находится в вашей связке ключей, когда вы пытаетесь нажать в качестве своей личной учетной записи, и наоборот. Используйте, ssh-add -lчтобы определить, какие ключи находятся в вашем связке ключей, и ssh-add -d keyfileчтобы удалить ключ из вашего связки ключей.

Кроме того, вам может потребоваться проверить ~/.ssh/config, настроили ли вы его для предоставления определенных ключей ssh ​​в github. Наконец, я не знаю, как github работает с двумя учетными записями, имеющими один и тот же открытый ключ ssh, поэтому убедитесь, что вы этого не делаете.

Вальтер Мундт
источник
3
Вы также можете, если необходимо, использовать GIT_SSHпеременную окружения, чтобы указать git использовать другую команду для ssh; в частности, вы можете использовать определенный ключ. См. Основную страницу руководства git или, возможно, этот вопрос .
Cascabel
В моей системе (OSX 10.5) команда на удаление ключа из связки ключей былаssh-add -d keyfile
Motin
Спасибо, @Motin, я именно это и хотел сказать. Отредактировано.
Walter Mundt
12

Недавно у меня была такая же проблема, потому что я создал новую учетную запись github. Я попробовал ответы выше, но это не помогло. Затем я увидел где-то сообщение об удалении github из Keychain Access (только если вы используете Mac ). Когда я git push, он запрашивает имя пользователя и пароль, и это сработало!

flipjs.io
источник
@Carpetsmoker Похоже, OP предлагает решение для Mac.
Zev Spitz
1
Пожалуйста, попробуйте найти исходный пост и добавить его как ссылку.
Zev Spitz
1
stackoverflow.com/questions/11067818/…
вишну висванат
11

У меня такая же проблема. Оказывается, у меня было две учетные записи на GitHub, использующие один и тот же ключ SSH, и GitHub по умолчанию использовал неправильную учетную запись, у которой не было разрешения на репо, которое я искал. Я удалил SSH-ключ из учетной записи, которую не использовал, все работало, как ожидалось.

Вы можете проверить, с какой учетной записью GitHub аутентифицирует себя:

ssh -T git@github.com

Для меня это изначально показывало неправильное имя пользователя, но после удаления дублированного ключа SSH из этой учетной записи он затем показал правильное имя пользователя, и мое извлечение и нажатие на мое репо сработало хорошо.

Райан
источник
8

Я знаю, что это может быть немного поздно, но я застрял в этом довольно долго и, наконец, исправил это следующим образом:

пример скриншота

  • Войдите в доступ к связке ключей (osX)

  • поиск git (убедитесь, что вы выбрали все элементы)

  • Здесь вы найдете учетные данные виновных. Удалите их.

Надеюсь это поможет!

А.Дев
источник
Это был единственный ответ, который мне помог!
Wilder Pereira
Этот ответ помог мне исправить проблему в Mac.
Javascript Hupp Technologies
6

Это способ сделать это: вы можете использовать разные конфигурации ssh для разных учетных записей ssh.

Обновлено 22 февраля:

Проверьте эту ссылку: https://gist.github.com/2351996

спрашивает
источник
Связанный Gist и первый комментарий на странице Gist отлично работали для меня. Я думаю, что это лучше, чем ответ Уолтера Мундта, поскольку вы можете оставить несколько ключей на своем связке ключей, и все будет «просто работать».
keybits
3

Если изменение ключа SSH, связанного с учетной записью, не работает, измените адрес электронной почты, связанный с учетной записью.

Перейдите в Github> Настройки учетной записи> Электронная почта и убедитесь, что адрес электронной почты, который вы используете для фиксации, совпадает с адресом электронной почты в учетной записи.

Чтобы узнать, какой адрес электронной почты вы используете для фиксации, выполните следующую команду: git config --global user.email . Если вам нужно изменить адрес электронной почты, который вы используете для фиксации, запустите git config --global user.email "your_email@youremail.com".

Бауб
источник
2

У меня такая же проблема. В моем случае произошло следующее:

Ранее я сделал так, чтобы git не запрашивал мои учетные данные каждый раз, когда я разговариваю с удаленным репозиторием: git config --global credential.helper wincred

Я решил проблему, выполнив ту же команду с "none", заменив "wincred" git config --global credential.helper none

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

Хун Цао
источник
1

У меня тоже была эта проблема, но ни одно из других решений не помогло мне. Оказывается, для работы мы создали .netrcфайл, в котором были записи для аутентификации github. Команда gitвсегда использовала тот .netrc, который имел мое старое имя пользователя и пароль. Мне пришлось отредактировать записи в моем .netrcфайле, чтобы использовать новое имя пользователя и пароль.

Стивен Ламберт
источник
1

Я нашел временное решение, в котором при первом запуске killall ssh-agent затем добавьте ключи ssh, сгенерированные для учетной записи, которую вам нужно использовать.ssh-add ~/.ssh/id_4shameer

Это единственный способ работы с несколькими учетными записями github, когда мы получим ошибку типа ERROR: Permission to user/repo-git.git denied to username.

Mshameer
источник
1

Никогда не было проблем с git, пока на работе они недавно не подключили наши MacBook к Active Directory и добавили несколько учетных записей администратора на мою машину. Однако после этого git будет работать нормально, пока я не заблокирую свой экран и не вернусь. Тогда я бы получил неопределенную ошибку, похожую на

No user exists for uid 1927040837
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

У меня есть только один ключ ssh на этой конкретной машине для моего пользователя, и я использую zsh в своем термине. Электронная почта и имя пользователя были правильными, поэтому проблема не в этом. Следовательно, перезапуск после каждого блокирования машины бесполезен. Решением для меня было отредактировать мой.zshrc файл и раскомментировать строку, экспортирующую ssh-ключ (чего мне никогда не приходилось делать раньше и я использую zsh в течение многих лет).

Строка должна выглядеть примерно так:

# ssh
export SSH_KEY_PATH="~/.ssh/<your_rsa_id>"

Как только вы это сделаете, просто запустите resetтерминал, и все будет работать нормально.

Надеюсь, это поможет кому-то другому.

Андрув Харт
источник
0

Я хотел бы добавить - если вы работаете с учетной записью другого пользователя, убедитесь, что вы добавили себя в область соавторов в настройках репозиториев.

Дэн Келли
источник
0

Я тоже столкнулся с этой проблемой, и ни одно из вышеперечисленных решений не сработало даже после того, как я удалил свой ключ ssh и создал новый. Оказалось, что ssh-agent использовал кешированный ключ, поэтому мне пришлось запустить его, killall ssh-agentи он сработал.

Нашел решение здесь. http://fzysqr.com/2012/08/28/quick-tip-wrong-ssh-key-cached-with-github-after-changing-users-and-keys/

Hobberwickey
источник