Git以错误的用户身份推送到远程GitHub存储库


82

我有一个工作GitHub帐户,一个个人帐户。首先,我将个人帐户用于测试项目,然后继续前进,并在同一台计算机上使用另一个帐户创建了一个存储库。

现在,我想再次在个人帐户上创建一个新的存储库,更改了global和local user.name,并做了一个新的ssh密钥对,输入了GitHub设置页面。然后我建立目录

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

但这现在告诉我

错误:拒绝对personaluser / newrepo.git的权限

我不知道另一个帐户如何与此帐户相关联。.git/config没有显示workusername相关信息。

如果您使用的是Windows 10,请花些时间阅读Rajan的答案。


1
对于Windows 10,请在下面回答。从凭据管理器中删除凭据。浪费了2个小时的时间。
xenteros

@xenteros请将此作为答案发布。我输了1小时,您又救了我1小时。
lexicore

Answers:


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与Host您的用户库中的正确URL匹配即可,具体取决于您的用户名。如果您已经有个人存储库,则可以.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

当然,您始终可以Host~/.ssh/config文件中的网址之一设置为

Host github.com

我以前只是work.github.com看配置关系比较容易。

设置完所有这些之后,您应该可以将其推入每个相应的遥控器。

编辑

需要注意的一件事是,我自己发现,如果您为自己的user.email值设置了全局git config值(并且我user.name想也会发送不同的值),则git将显示您作为该电子邮件用户的提交。为了解决这个问题,您可以在本地存储库中覆盖全局git config设置:

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

现在,这应该以该存储库的正确用户身份发送提交。


3
奇迹般有效。谢谢!
NorthBridge 2013年

1
该网站为有兴趣的人更全面介绍了ssh配置文件。
菲尔(Phil)

3
肯定是最有用的答案。谢谢你
limp_chimp

辉煌!非常感谢!
Fydo 2014年

1
我缺少的关键是在.git / config中指定ssh主机-非常感谢!
xdotcommer

45

转到控制面板>用户帐户>凭据管理器>通用凭据

删除git凭证。然后运行git push。这将提示您询问git凭据。输入正确的凭据。


3
这在Windows10中运行Git Bash时解决了我的问题。感谢@ rajan-patil
suspicious_williams

对于没有英语的Windows GUI的用户,可以control /name Microsoft.CredentialManager在命令行上键入以到达凭证管理器
bgusach

奇怪,但它的伟大工程,只有当我开始混帐击(如上所述),但如果我继续开始使用同一个终端我git push错误-它不断抛出同样的错误的时候,甚至在终端重启后。不过谢谢你,反正-它救了我大量的时间在年底
格里Didenko

这绝对是我遇到的最好的答案。其余的都是令人费解的,但这是简单而精确的。
claudekennilol

这一次有效。再次添加帐户后,相同的问题继续发生。
Megakoresh

37

您也可以只切换到https,而不是ssh。如果使用https,它将遵循.git / config设置。因此,在.git / config中,更改:

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

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

(这些值在git项目页面上,单击SSHHTTP按钮以设置新值);


2
+1!这是做从借用机等一次性推,你不想安装私钥等一个很好的解决方案
lambshaanxy

1
我认为使用的唯一问题https是您每次执行操作时都必须输入用户名/密码push,除非有一些我不知道的git config信息
hellatan 2012年

我知道这已经很老了,但是谢谢你。我的机器未设置ssh,但它仍在尝试将我的工作github帐户而不是我的个人帐户推送一次。在我的项目目录中的.git / config中使用了它,效果惊人。好极了!为您投票。
Sady 2014年

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是否已将其配置为向github提供某些ssh密钥。最后,我不知道github如何处理具有相同ssh公钥的两个帐户,因此请确保您不这样做。


3
您也可以在必要时使用GIT_SSH环境变量来告诉git对ssh使用不同的命令。特别是,您可以让它使用特定的密钥。请参见主要的git手册页,或者也许是这个问题
卡斯卡贝尔2011年

在我的系统(OSX 10.5)上,从密匙环删除密匙的命令是ssh-add -d keyfile
Motin 2012年

谢谢@Motin,这实际上就是我要说的。编辑。
沃尔特·蒙德

12

我最近遇到了同样的问题,因为我创建了一个新的github帐户。香港专业教育学院尝试了上述答案,但没有帮助。然后,我在某处看到有关从Keychain Access删除github的帖子(仅当您使用mac时)。当我git push时,它会要求输入用户名和密码,并且可以正常工作!


@Carpetsmoker听起来好像OP提供了Mac特定的解决方案。
Zev Spitz 2014年

1
请尝试查找原始帖子并添加为链接。
Zev Spitz 2014年


11

我有同样的问题。事实证明,我在GitHub上有两个使用相同SSH密钥的帐户,并且GitHub默认使用了错误的帐户,该帐户未获得我想要的回购权限。我从帐户中删除了SSH密钥,但我并未按预期使用所有密钥。

您可以测试GitHub正在使用哪个帐户进行身份验证:

ssh -T git@github.com

对我来说,这最初显示了错误的用户名,但是从该帐户中删除了重复的SSH密钥后,它随后显示了正确的用户名,并且我对我的存储库的推入和推入效果很好。


8

我知道这可能会晚一点,但是我坚持了很长时间,最后像这样修复了它:

屏幕截图示例

  • 进入钥匙串访问(osX)

  • 搜索git(确保已选择所有项目)

  • 在这里,您将找到罪魁祸首。删除它们。

希望这可以帮助!


这是唯一帮助我的答案!
Wilder Pereira

这个答案帮助我解决了Mac中的问题。
Javascript Hupp Technologies

6

这是一种方法:可以为不同的ssh帐户使用不同的ssh配置。

2月22日更新:

查看此链接:https : //gist.github.com/2351996


链接的Gist和Gist页面上的第一条评论对我来说非常合适。我认为这优于沃尔特·蒙德(Walter Mundt)的回答,因为您可以在钥匙圈上留下多个钥匙,并且一切“正常”。
13年

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

这是当我们收到type错误时可以在多个github帐户上工作的一种方式ERROR: Permission to user/repo-git.git denied to username


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-key的行的注释(这是我以前从未做过的事情,并且已经使用zsh多年了)。

该行应如下所示:

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

完成此操作后,只需运行resetin终端即可,一切正常。

我希望这可以帮助其他人。


0

我要添加-如果您正在使用其他用户的帐户,请确保将自己添加到存储库设置下的合作者区域。


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.