git从终端推送错误的用户


112

我在git和终端机上遇到问题。

这是一个画廊,向您展示我的问题:http : //imgur.com/a/6RrEY

当我从终端推送提交时,git说我用另一个用户名推送它们,那是我组织(我公司)的用户,根本没有提交,看来它不属于任何人:(请查看图库第一张图片)

但是,当我在Mac上使用Github时,这不会发生,在Feed中,我看到了自己推送的提交。

该问题也影响到我的个人存储库,我的终端说我没有权限在这些存储库上推送提交(这显然是错误的),因为它试图与该用户一起推送它:(请查看图片库第二张图片)

你猜怎么了 ?Mac版Github也不会发生这种情况。

几天前,我将计算机更改为全新的计算机,所以我重置了github的所有ssh密钥,只保留了Github为Mac生成的新密钥,因此我认为没有隐藏的幽灵用户/ ssh密钥在某个地方,这个硬盘是全新的:(请查看图库第三张图片)

我的.gitconfig文件很清楚,只有我的凭据:(请查看库第四张图片)

我真的不明白,帮助,StackOverflow,您是我唯一的希望。

(我对我的拙劣的金普技能和《星球大战》的致歉)

编辑: ssh-add -l仅显示由github为mac创建的良好的ssh密钥,我只有一个github帐户

EDIT2: ssh -T git@github.com认出我是好用户。

EDIT3:经过几次测试,看起来我的终端使用我的用户名进行提交,但将其与另一个用户一起推送,Github for 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,输入了git, git config --global push.default simple 现在即使没有强制用户也需要我的凭据。那很奇怪。谢谢大家的帮助,你们真棒!


2
检查~/.gitconfig$project_root/.git/config归档。这两个中的一个肯定为用户名配置错误。
mu无2014年

1
感谢您的回答ansh0l。 ~/.gitconfig很清楚,也是$project_root/.git/config。实际上,每个个人项目都会遇到这个问题,因为其他用户属于拥有这些存储库的我的组织,因此可以推送工作项目。
银飞2014年

那么您是否有多个github帐户?一个供公司使用,另一个供个人使用?
mu无2014年

不,只有一件适合一切。
银飞2014年

1
一个烦人的解决方案是仅重新生成另一个SSH密钥。如果您将当前的SSH密钥与其他服务一起使用,那将毫无意义。
Eduardo Bautista 2014年

Answers:


167

我刚刚在工作中遇到了这个问题。Mac随附的或安装xcode时随附的内置git会在钥匙串中缓存git凭据。我的解决方法是:

开始访问钥匙串(通过cmd +空格启动Spotlight,键入钥匙串,按Enter)

在左上方的钥匙串下,选择“登录”。在左类别下,选择“密码”

找到名称“ github”并将其删除。


2
确保在此处删除所有github条目并设置登录配置* git config --global user.name <名称> * git config --global user.email <email>
Shank_Transformer

就我而言,SourceTree遇到了此问题。删除钥匙扣中的物品即可修复!
Shoerob 2015年

1
@Shank_Transformer您的解决方案为我工作!谢谢!
Nazariy

您可能需要seahorse在Ubuntu上搜索(或直接启动)。
caw

3
先生,我对您
负有责任

46

github通过它看到的ssh键来识别您,而不是通过git中的任何设置来识别您。

因此,当您尝试从个人帐户中进行推送时,您需要确保工作帐户的ssh密钥不在密钥环中,反之亦然。

使用ssh-add -l以确定哪些键是在你的钥匙圈,并ssh-add -d <keyfile>从你的钥匙圈中删除键,如果dosent工作删除了“不必要的” SSH密钥~/.ssh/config

资源

注意:Github仍然仅根据电子邮件来识别您的提交。


5
这是唯一的答案,可以解释为什么尽管我user.email设置正确,但仍然持续使用错误的github帐户。希望我能投票五次。
克里斯(Chris)

1
以我ssh-add -D
为例,

这是唯一对我有用的答案。谢谢!!
爱德华·哈奈特

唯一有效的选择。为什么git无法选择正确的键是没有道理的。由于我们提到的是ssh文件,因此必须在config中使用。
Revanth Kumar

当我这样做时,ssh-add -l我得到的答案无济于事。它表明4096 SHA256:lotsOfGibberish,about40chars (RSA)我不知道如何向我们提供此信息。
MiguelMunoz

20

尽管其他用户提供了很多不错的选择,但是解决此问题的唯一方法是完全重新安装git并键入git config --global push.default simple重写好的凭据。


@VonC,尽管您的回答很好,但它根本没有用。这是唯一对我有用的解决方案。我想知道它是git问题还是OSX ...
swilgosz 2016年

40
git config --system --unset credential.helper为我工作,现在再次要求我提供GitHub凭据,并且可以提供正确的用户ID和密码。
CodeManX

@CoDEmanX您的答案是唯一对我有用的答案。对于遇到此问题的其他任何人,这是因为我们在github上使用2FA,并且我需要首先从github gui生成令牌,然后在重置本地凭据后从命令行使用该令牌作为我的密码!查看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
Balint

谢谢,我从来没有在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文件中没有设置环境变量……
Yinfei 2014年

但是,@ Yinfei84,请检查您env的输出。
VonC 2014年

@ Yinfei84如果(进行测试)显式设置这些变量,然后尝试进行提交和推送,将会发生什么。那会更好吗?
VonC 2014年

我只是这样做,问题仍然存在。
银飞2014年

2
打扰一下,如果我不清楚的话,我的意思是,如果我强迫用户沿着这样的路径运行,它会起作用:http://USER@github.com/USER/REPO.git
Yinfei

9

首先运行一个临时解决方案, killall ssh-agent然后添加为您需要使用的帐户生成的ssh密钥ssh-add ~/.ssh/id_4shameer

当我们收到类型错误时,它将帮助我们在多个github帐户上工作 ERROR: Permission to user/repo-git.git denied to username.


1
MacOS钥匙串中删除了任何Github条目后,我就这样做了,并且效果很好。两个点,之后,所述SSH-剂必须与重新启动,并且命令具有与被执行。killalleval "$(ssh-agent -s)"ssh-addsudo
arvymetal

7

如果您使用的是MAC,请转到“ 钥匙串访问”,然后删除不需要git访问的用户条目。


4

我的解决方案是在我的〜/ .ssh / config文件中为github添加一个条目。我必须这样做是因为:

  1. 我有多个具有相同密钥的github帐户(不要这样做!)
  2. 当您使用ssh进行“ git push”操作时,默认情况下,计算机会捕获id_rsa并将其用作其ssh身份。
  3. github不能(毫不奇怪)解除您所指的帐户的冲突,因为它基于提供的密钥来建立帐户,如果与多个帐户绑定在一起,则会导致类似的痛苦。长期以来,杀手is是我一直在逃避这一切,事情才得以解决。

我添加的条目是:

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

我创建了一个新的密钥,对我的帐户来说是唯一的,即id_rsa_waterproofpatch。我的ssh config中的此项指定了与github.com的连接,我希望提供此密钥。

另一个解决方案可能是我登录另一个帐户,删除重复的ssh密钥。


2

我遇到了类似的问题,事实证明,问题出在公共密钥文件的最后一行包含我的电子邮件地址。这似乎覆盖了我的配置中的“用户”设置。一旦我从.pub文件中删除了我的电子邮件(并重新上传到我的仓库),Git就使用正确的用户进行了连接。


这对我有用。不知道为什么公钥文件上的标识符最初是“ name @ domain”格式,但确实如此。
Brian Wagner

1

对我有用的是使用Github存储库的https URL而不是ssh URL。我转到Github项目页面并将https URL复制到剪贴板中,然后将其粘贴到下面的第二个命令中:

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

1

屁股好痛!

问题:

  1. 在git hub上创建一个仓库
  2. 克隆到本地计算机
  3. 无法推送403。

由于不明原因而导致git push使用错误的用户。我有几个不同的git hub用户ID。我为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

b。一旦找到正确的无花果文件,请按照以下说明将其删除

git config --global --unset credential.helper

现在在我的本地仓库中,我入侵了.git / config文件

我变了

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

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



0

我解决了在MacOS High Sierra上删除(或重命名为* .bak)id_rsa和id_rsa.pub文件的问题。这里的想法。

我在〜/ .ssh / config中有自定义的主机重定向,应该在重命名两个文件之前应用该重定向,但是使用了错误的用户...


0

那对我有用:

  1. 更改.git-credentials内部的凭据
  2. 在.gitconfig中更改全局user.name和user.email

0

什么对我有用,删除存储库并再次添加它:

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

0

即使在卸载我的git后,我在Windows10中也有同样的问题,如@ user542833所说,这是因为Windows缓存并且您应该删除Windows中的Github凭据,Credential Manager并且当您再次尝试推送时,Windows询问您的凭据并再次设置


这有时对我有用,但有时却没有。
bvdb

0

尝试用新帐户推送到新的GitHub页面存储库时,花了6个小时弄清楚了这一点。

即使设置了配置user.name和user.email,它也将默认为我的主帐户。

这是因为ssh密钥将默认为id_rsa(我的主帐户)。

要使用新帐户,我必须运行:

ssh-add ~/.ssh/my_new_key

这将使git在推送时使用新密钥。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.