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 и теперь он принимает мои учетные данные, даже не заставляя пользователя. Это странно. Спасибо всем за помощь, вы молодцы!

Yinfei
источник
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" и удалите его.

пользователь542833
источник
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чтобы переписать хорошие учетные данные.

Yinfei
источник
@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 и удалите ее. После этого все работает нормально.

Gowtham
источник
Спасибо, Гаутэм
Балинт
Спасибо, у меня никогда раньше не было этой проблемы в 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
источник
Спасибо за ответ 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.

mshameer
источник
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
AEDWIP
источник
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, которые должны быть применены, но использовались неправильным пользователем, прежде чем я переименовал два файла ...

CodingYourLife
источник
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
fguillen
источник
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 использовать новый ключ при нажатии.

jmoz
источник