git нажимает неправильного пользователя с терминала


112

У меня проблема с git и моим терминалом.

Вот галерея, чтобы показать вам мою проблему: http://imgur.com/a/6RrEY

Когда я нажимаю коммиты с моего терминала, git говорит, что я нажимаю на них с другим именем пользователя, это пользователь из моей организации (моей компании) без фиксации вообще, и кажется, что он никому не принадлежит: (проверьте первую картинку в галерее)

Но этого не происходит, когда я использую Github для Mac, в ленте я вижу коммиты, отправленные мной.

Проблема также влияет на мои личные репозитории, мой терминал говорит, что у меня нет разрешения на отправку коммитов в эти репозитории (что, очевидно, неверно), поскольку он пытается подтолкнуть его к этому пользователю: (проверьте второе изображение галереи)

Угадай, что ? Этого не происходит и с Github для Mac.

Я сменил свой компьютер на совершенно новый несколько дней назад, поэтому я сбросил весь свой ssh-ключ github и оставил только новый, сгенерированный Github для Mac, поэтому я не думаю, что там скрыт какой-то призрачный пользователь / ssh-ключ где-то этот жесткий диск совершенно новый: (проверьте третье фото в галерее)

С моим файлом .gitconfig все ясно, есть только мои учетные данные: (проверьте четвертый рисунок галереи)

Я правда не понимаю, помогите, StackOverflow, ты моя единственная надежда.

(Приношу свои извинения за мои плохие навыки GIMP и ссылку на Звездные войны)

РЕДАКТИРОВАТЬ: ssh-add -l показывает только хороший ключ ssh, созданный github для Mac, и у меня только одна учетная запись github

EDIT2: признайте ssh -T git@github.com меня хорошим пользователем.

EDIT3: после нескольких тестов похоже, что мой терминал выполняет коммиты с моим именем пользователя, но подталкивает их к другому, Github для Mac фиксирует и нажимает с хорошим именем пользователя. Эта ситуация происходит с каждым репо, которое я / делаю (даже новым единицы).

EDIT4: в личном репозитории git log --pretty="%h %an %ae"показывает мое хорошее имя пользователя

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

EDIT6: все работает нормально, если я заставляю пользователя указывать путь /.git/configк репозиторию, но я не думаю, что это хороший вариант:http://USER@github.com/USER/REPO.git

EDIT7: мы удалили пользователя git, который отправил за меня коммиты, и это вызывает еще одну ошибку:remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/USER/REPO.git/'

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: я установил git с помощью homebrew, набрал, git config --global push.default simple и теперь он принимает мои учетные данные, даже не заставляя пользователя. Это странно. Спасибо всем за помощь, вы молодцы!


2
проверьте ~/.gitconfigи $project_root/.git/configфайлы. Одно из этих двух наверняка неправильно настроено для имени пользователя.
— mu 無

1
Спасибо за ответ ansh0l. ~/.gitconfigясно и так есть $project_root/.git/config. Фактически, у меня есть эта проблема с каждым личным проектом, рабочие проекты могут быть отправлены, поскольку этот другой пользователь принадлежит моей организации, которой принадлежат эти репозитории.
— Yinfei

У вас есть несколько учетных записей на github? Один для компании, другой для личного пользования?
— mu 無

Нет, только один на все.
— Yinfei

1
Раздражающим решением было бы просто восстановить еще один ключ SSH. Если вы используете текущий ключ SSH с другой службой, это было бы бессмысленно.
— Эдуардо Баутиста

Ответы:


168

Просто у меня на работе возникла эта проблема. Встроенный git, который поставляется с Mac или поставляется при установке xcode, кэширует учетные данные git в связке ключей. Исправление для меня заключалось в следующем:

запустить доступ к связке ключей (запустите прожектор через cmd + пробел, введите keychain, нажмите Enter)

В разделе "Связки для ключей" слева вверху выберите "Войти". В разделе слева выберите "пароли".

найдите имя "github" и удалите его.


2
Убедитесь, что вы удалили здесь все записи github и установили конфигурацию входа * git config --global user.name <name> * git config --global user.email <email>
— Shank_Transformer

В моем случае SourceTree столкнулся с этой проблемой. Удаление элемента в связке ключей исправило это!
— Shoerob

1
@Shank_Transformer ваше решение сработало для меня! Спасибо!
— Назарий

Возможно, вам придется искать (или запускать напрямую) seahorseв Ubuntu.
— каркать

3
Я в долгу перед вами, сэр
— Baconbeastnz 05

47

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

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

Используйте, ssh-add -lчтобы определить, какие ключи находятся в вашем связке ключей, и ssh-add -d <keyfile>чтобы удалить ключ из вашей связки ключей, если он не работает, удалите «нежелательный» ключ ssh из ~/.ssh/config.

источник

NB: Github по-прежнему будет определять вашу фиксацию только на основе электронного письма.


5
Это единственный ответ, который объясняет, почему он постоянно использовал неправильную учетную запись github, несмотря на то, что я user.emailбыл настроен правильно. Хотел бы я проголосовать пять раз.
— Крис

1
в моем случае удаление ключа ssh сработало как шармssh-add -D
— rPawel 03

Это был единственный ответ, который помог мне. Спасибо!!
— Эдвард Хартнетт

Единственный вариант, который сработал. Не имеет смысла, почему git не выбрал правильный ключ. Поскольку мы упоминаем файл ssh, который он должен использовать в config.
— Ревант Кумар

Когда я это делаю, ssh-add -lя получаю бесполезный ответ. Типа, 4096 SHA256:lotsOfGibberish,about40chars (RSA)я не знаю, как нам эту информацию.
— MiguelMunoz

20

Несмотря на все отличные возможности, предоставленные другими пользователями, единственный способ исправить это - полностью переустановить git и ввести, git config --global push.default simpleчтобы переписать хорошие учетные данные.


@VonC, несмотря на то, что ваш ответ был отличным, он вообще не работал. Это единственное решение, которое у меня сработало. Интересно, это проблема с git или OSX ...
— swilgosz

40
git config --system --unset credential.helperработал у меня, теперь меня снова просят ввести мои учетные данные GitHub при нажатии, и я могу предоставить правильный идентификатор пользователя и пароль.
— CodeManX 02

@CoDEmanX ваш был единственным ответом, который сработал для меня. Для всех, кто сталкивался с этим, это произошло потому, что мы используем 2FA при работе с github, и мне нужно было сначала сгенерировать токен из графического интерфейса github и использовать его в качестве пароля из командной строки после того, как я сбросил свои локальные учетные данные! подробности можно найти на https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
— vancouverwill

Это просто файл .gitconfig. Либо удалите это, либо сбросьте ... Я столкнулся с этой проблемой, когда отправлял пробный проект на собеседование. Хотя, блин, больно. Это с файлом конфигурации
— Girish

git config --system --unset credential.helperне работает в Windows 10 git bash:error: could not lock config file C:/Program Files/Git/mingw64/etc/gitconfig: Permission denied
— Alex

17

Я использую Windows 10 и сегодня столкнулся с той же проблемой. В моем случае мои учетные данные для другого пользователя были сохранены диспетчером учетных данных Windows. Таким образом, удаление / отключение учетных данных git с помощью команды ниже, git config --global --unset credential.helper

не помогло. Мне пришлось вручную удалить запись в Windows, выполнив следующие действия:

Пуск -> Панель управления ---> Учетные записи пользователей ---> Управление учетными данными ---> Учетные данные Windows

Затем найдите запись вроде git: https://github.com и удалите ее. После этого все работает нормально.


Спасибо, Гаутэм
— Балинт

Спасибо, у меня никогда раньше не было этой проблемы в Windows, но сегодня у меня возникла эта проблема, и я рад видеть здесь ваш комментарий.
— RaKoDev

Вы говорите, что это «не помогло», но если он дал вам сообщение о том, что не может заблокировать файл конфигурации, проблема в том, что вам нужно запустить его из командной строки с повышенными правами, как было указано в комментарии выше. .
— Стефан

15

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

Имя автора, коммиттера и адрес электронной почты (которые важны для GitHub) получены из:

git config user.name
git config user.email

Однако, как указано в git configи git commit-tree, эти значения могут быть переопределены переменными среды:

GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL

Так что перепроверьте эти переменные.

Все работает нормально, если я заставляю пользователя войти в .git/configрепозиторий, но я не думаю, что это хороший вариант.

Но это должно быть хорошее решение.
При использовании https-адреса я всегда указываю в нем пользователя, чтобы убедиться, что аутентификация выполняется с правильным пользователем.

http://USER@github.com/USER/REPO.git

Спасибо за ответ VonC! К сожалению, мои git configучетные данные /username/.bashrc
— верны, и

@ Yinfei84, тем не менее, проверьте свой ' env' вывод.
— VonC

@ Yinfei84 что произойдет, если (для проверки) вы явно установите эти переменные и попробуете выполнить фиксацию и push. Тогда это сработало бы лучше?
— VonC

Я только что сделал это, и проблема не устранена.
— Yinfei

2
Простите, если я не понял, я имел в виду, что это http://USER@github.com/USER/REPO.git
— сработает,

9

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

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


1
Я сделал это после удаления любой записи Github из связки ключей MacOS , и это сработало отлично. Две точки, после killall, ssh-agent должен быть перезапущен с помощью eval "$(ssh-agent -s)", и ssh-addкоманда должна быть выполнена с sudo.
— arvymetal

7

Если вы используете MAC, перейдите в раздел «Связка ключей» и удалите запись пользователя, для которого вам не нужен доступ с помощью git.


4

Решением для меня было добавить запись в мой файл ~ / .ssh / config для github. Мне пришлось это сделать, потому что:

  1. У меня было несколько учетных записей github с одним и тем же ключом (не делайте этого!)
  2. когда вы «git push» используете ssh, ваш компьютер по умолчанию захватывает id_rsa и использует его в качестве идентификатора ssh.
  3. github не может (неудивительно) разрешить конфликт с учетной записью, которую вы имеете в виду, поскольку он основывает учетную запись на представленном ключе, что, если оно привязано к более чем одной учетной записи, приводит к подобной боли. Убийца в течение долгого времени, мне это сходило с рук, и все получилось.

Я добавил:

Host github.com
    Hostname github.com
    Port 22
    User waterproofpatch
    IdentityFile ~/.ssh/id_rsa_waterproofpatch

Я создал новый ключ, уникальный для моей учетной записи, как id_rsa_waterproofpatch. Эта запись в моей конфигурации ssh указывает, что для подключений к github.com я хочу предоставить этот ключ.

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


2

У меня была аналогичная проблема, и оказалось, что проблема заключалась в том, что файл открытого ключа содержал мой адрес электронной почты в последней строке. Похоже, это переопределило настройку пользователя в моей конфигурации. Как только я удалил свою электронную почту из файла .pub (и повторно загрузил его в репо) Git подключился с использованием правильного пользователя.


Это сработало для меня. Не уверен, почему идентификатор в файле открытого ключа изначально был в формате «имя @ домен», но это было так.
— Брайан Вагнер

1

Что сработало для меня, так это использовать URL-адрес https репозитория Github вместо URL-адреса ssh . Я перешел на страницу проекта Github и скопировал URL-адрес https в буфер обмена, а затем вставил его во вторую команду ниже:

git remote rm origin
git remote add origin https://[...]

1

Какая боль в заднице!

проблема:

  1. создать репо на git hub
  2. клонировать на локальную машину
  3. не могу запихнуть 403.

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

Я работаю на Mac. вот что я наконец сделал

1) удалите credential.helper

  • Каким-то образом помощник по учетным данным был настроен на osxkeychain
  • когда я запустил связку ключей, щелкнул логин, пароли и поискал github, я нашел 3 записи. Я понятия не имею, как связка ключей могла узнать, какой из них использовать

а. вам нужно выяснить, где настроен credential.helper

git config --local credential.helper
git config --global credential.helper
git config --system credential.helper

б. как только найдете правильный файл fig, удалите его следующим образом

git config --global --unset credential.helper

Теперь в моем локальном репо я взломал файл .git / config

Я изменился

    url = https://github.com/aedavids/lab3RotationProject.git

к

    url = https://myGitHubUserId@github.com/aedavids/lab3RotationProject.git

1

В моем конкретном случае проблема заключалась в том, что я использовал .netrcдля доступа, github.comи он был настроен с токеном от другого пользователя:

machine github.com login <another-user-token>

0

очистка связки ключей не помогла ... Мне пришлось ssh-add -Dзаново добавить ключ с помощьюssh-add <keyfile>


0

Я решил эту проблему, удалив (или переименовав в * .bak) файлы id_rsa и id_rsa.pub в MacOS High Sierra. Идея отсюда .

У меня есть настраиваемые перенаправления хоста в ~ / .ssh / config, которые должны быть применены, но использовались неправильным пользователем, прежде чем я переименовал два файла ...


0

Вот что сработало для меня:

  1. Изменение учетных данных внутри .git-credentials
  2. Изменение глобального user.name и user.email внутри .gitconfig

0

Что сработало для меня, удалив репо и добавив его снова:

git remote rm origin
git remote add origin git@github.com:fguillen/MyApp.git

0

У меня такая же проблема в windows10 даже после удаления моего git, поскольку @ user542833 говорит, что это потому, что кеш Windows, и вы должны удалить учетные данные Github в своих окнах, Credential Managerи когда вы снова пытаетесь нажать, окна запрашивают ваши учетные данные и устанавливают их снова


Иногда это срабатывало для меня, но иногда и нет.
— bvdb

0

Просто потратил 6 часов на то, чтобы понять это, когда пытался нажать на новое репозиторий страниц GitHub в новой учетной записи.

Даже после установки конфигурации user.name и user.email по умолчанию будет использоваться моя основная учетная запись.

Это потому, что ключ ssh по умолчанию будет id_rsa (моя основная учетная запись).

Чтобы использовать новую учетную запись, мне пришлось запустить:

ssh-add ~/.ssh/my_new_key

который затем заставит git использовать новый ключ при нажатии.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.