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бачити відносини конфігурації простіше.

Після того, як усі вони встановлені, ви зможете натиснути на кожен відповідний пульт.

РЕДАГУВАТИ

Зауважимо одне, що я щойно дізнався, що якщо ви коли-небудь встановлювали для свого user.emailзначення глобальні значення конфігурації git (і, я здогадуюсь, воно 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з помилкою, він постійно видає однакові помилки, навіть після перезапуску терміналу. Але в будь-якому разі спасибі - це заощадило мені багато часу в кінці
Костянтин Діденко

Це, безумовно, найкраща відповідь, з якою я стикався. Решта були спантеличені, але це було просто і точно.
claudekennilol

Це працює ОДИН раз. Після повторного додавання облікових записів така сама проблема продовжує виникати.
Мегакореш

38

Ви також можете просто перейти на https, а не на ssh. Якщо ви використовуєте https, він буде поважати налаштування .git / config. Отже, у .git / config змініть:

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

до

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

(ці значення знаходяться на сторінці проекту git, натисніть на кнопки SSHта, HTTPщоб отримати нові значення);


2
+1! Це дійсно хороше рішення для одноразових натискань з машин-позичальників тощо, де ви не хочете встановлювати приватні ключі тощо
lambshaanxy

1
я думаю, що єдина проблема з використанням httpsполягає в тому, що вам доводиться вводити користувача / переходити кожного разу, коли ви виконуєте a push, якщо тільки немає деяких налаштувань git, про які я не знаю
hellatan

Я знаю, що це дуже старе, але ДЯКУЮ. Моя машина не налаштована на ssh, але вона все ще намагалася перейти на мій робочий обліковий запис github, а не на особистий для одноразового натискання. Використовував це в моєму .git / config у моєму каталозі проектів і працював надзвичайно. Ага! Проголосуйте за вас.
Сади

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, це власне те, що я хотів сказати. Відредаговано.
Вальтер Мундт

12

У мене була така сама проблема нещодавно, тому що я створив новий обліковий запис github. Я спробував відповіді вище, але це не допомогло. Потім я десь побачив допис про видалення github із Keychain Access (лише якщо ви використовуєте mac ). Коли я git push, він потім запитує ім’я користувача та пароль, і це спрацювало!


@Carpetsmoker Здається, OP пропонує рішення для Mac.
Зев Шпіц

1
Будь ласка, спробуйте знайти оригінальну публікацію та додати як посилання.
Зев Шпіц


11

У мене була та сама проблема. Виявляється, у мене два облікові записи на GitHub використовували один і той же ключ SSH, і GitHub за замовчуванням використовував неправильний обліковий запис, який не мав дозволу на репо, яке я шукав. Я видалив ключ SSH з облікового запису, який не використовував, щоб все працювало, як очікувалося.

Ви можете перевірити, який обліковий запис GitHub автентифікує себе:

ssh -T git@github.com

Для мене це спочатку показувало неправильне ім'я користувача, але після вилучення дубліката ключа SSH з цього облікового запису воно показувало правильне ім'я користувача, і моє витягування та натискання на моє репо працювало добре.


8

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

приклад знімка екрана

  • Перейдіть у доступ до брелока (osX)

  • search git (переконайтесь, що вибрали Усі елементи)

  • Тут ви знайдете дані про винуватця. Видаліть їх.

Сподіваюся, це допомагає!


Це була єдина відповідь, яка мені допомогла!
Уайлдер Перейра,

Ця відповідь допомогла мені виправити проблему в mac.
Javascript Hupp Technologies

6

Це спосіб зробити це: ви можете використовувати різні конфігурації ssh для різних акаунтів ssh.

Оновлено 22 лютого:

Перевірте це посилання: https://gist.github.com/2351996


Пов’язаний «Гіст» та перший коментар на сторінці «Гіст» для мене прекрасно працювали. Я думаю, що це перевершує відповідь Уолтера Мундта, оскільки ви можете залишити кілька ключів на своєму брелоку, і все "просто працює".
клавішні

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.


1

Ніколи не мав жодних проблем з git, поки на роботі нещодавно вони не підключили наші макбуки до 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термінал in, і все працює нормально.

Сподіваюся, це допомагає комусь іншому.


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/

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