Git作为错误的用户推送到远程GitHub存储库

时间:2011-01-12 04:28:35

标签: git permissions github

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

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

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

但现在告诉我

  

错误:对personaluser / newrepo.git的许可被拒绝

我不知道其他帐户是如何连接到这个帐户的。 .git/config显示没有workusername相关内容。

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

15 个答案:

答案 0 :(得分:64)

这听起来与我目前的工作设置非常相似。您似乎已经设置了单独的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只是指向获取正确用户设置的指针,对将文件正确地发送到目标HostName网址没有任何影响。

现在,您只需确保您的origin(或任何remote一般)网址与您各自的回购中的正确Host网址相匹配,具体取决于您的用户名。如果您已有现有的个人回购,则可以在文本编辑器中编辑该回购的.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配置值(我猜测user.name也会发送不同的值) ,git将以电子邮件用户身份显示您的提交。要解决此问题,您可以覆盖本地存储库中的全局git配置设置:

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

现在应该将提交作为该回购的正确用户发送。

答案 1 :(得分:35)

您也可以切换到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 :(得分:35)

转到“控制面板”&gt;用户帐户&gt;凭证管理器&gt;通用凭证

删除git凭据。然后运行git push。这将提示要求git凭据。输入正确的凭据。

答案 3 :(得分:33)

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

因此,当您尝试推送个人帐户时,您需要确保您的工作帐户的密钥环不在您的密钥环中,反之亦然。使用ssh-add -l确定密钥环中的密钥,并ssh-add -d keyfile从密钥环中删除密钥。

此外,您可能需要检查~/.ssh/config是否已将其配置为向github提供某些ssh密钥。最后,我不知道github如何处理具有相同ssh公钥的两个帐户,所以请确保你不要这样做。

答案 4 :(得分:12)

我最近遇到了同样的问题,因为我创建了一个新的github帐户。我已经尝试了上面的答案,但它没有帮助。然后我看到一篇关于从 Keychain Access 删除github的帖子(仅当你使用 mac 时)。当我git push,然后询问用户名和密码,它工作正常!

答案 5 :(得分:10)

我遇到了同样的问题。事实证明我在GitHub上有两个帐户使用相同的SSH密钥,而GitHub默认使用了错误的帐户,该帐户没有我所追求的回购权限。我从我没有使用的帐户中删除了SSH密钥,所有工作都按预期工作。

您可以使用以下方式测试GitHub使用哪个帐户进行身份验证:

ssh -T git@github.com

对我来说,这最初显示错误的用户名,但是从该帐户中删除了重复的SSH密钥后,它显示了正确的用户名,我的拉动和推送到我的仓库工作得很好。

答案 6 :(得分:6)

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

2月22日更新:

点击此链接:https://gist.github.com/2351996

答案 7 :(得分:4)

我知道这可能有点晚了,但我已经坚持了很长一段时间并最终解决了这个问题:

example screenshot

  • 进入钥匙串访问(osX)

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

  • 在这里你会找到罪魁祸首。删除它们。

希望这有帮助!

答案 8 :(得分:3)

如果更改与该帐户关联的SSH密钥不起作用,请更改与该帐户关联的电子邮件。

转到Github&gt;帐户设置&gt;通过电子邮件确认您用于提交的电子邮件地址与帐户中的电子邮件相匹配。

要查看您用于提交的电子邮件地址,请运行以下命令:git config --global user.email。如果您需要更改用于提交的电子邮件地址,请运行git config --global user.email "your_email@youremail.com"

答案 9 :(得分:2)

我遇到了同样的问题。以下是我的情况:

我以前做过git,每当我与远程存储库交谈时都不会问我的凭证: git config --global credential.helper wincred

我通过运行相同的命令解决了这个问题,“none”替换了“wincred” git config --global credential.helper none

然后git再次询问我的用户名/通行证,一切顺利

答案 10 :(得分:1)

我也有这个问题,但其他解决方案都没有对我有用。事实证明,对于工作,我们创建了一个.netrc文件,其中包含github身份验证条目。 git命令始终使用.netrc,其中包含我的旧用户名和密码。我必须编辑.netrc文件中的条目才能使用新的用户名和密码。

答案 11 :(得分:1)

在工作中他们最近将我们的macbook连接到Active Directory&amp;在我的机器上添加了一些管理员帐户。然而,在那之后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>"

一旦你这样做,只需在终端中运行reset,一切正常。

我希望这有助于其他人。

答案 12 :(得分:0)

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

答案 13 :(得分: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/

答案 14 :(得分:0)

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

当我们收到ERROR: Permission to user/repo-git.git denied to username类型的错误时,这是​​我们可以处理多个github帐户的一种方式。