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

Raz*_*Faz 74 git permissions github

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

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

git init
git remote add origin <url>
git push origin
Run Code Online (Sandbox Code Playgroud)

但现在告诉我

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

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

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

hel*_*tan 68

这听起来与我目前的工作设置非常相似.您似乎已经设置了单独的,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
Run Code Online (Sandbox Code Playgroud)

每个属性听起来都很自我解释但是那个IdentitiesOnly.我不会试图解释这是什么,但这是我目前的设置,并正常工作.

还值得注意的是,Host URL它只是一个指针,用于获取正确的用户设置,并且对将文件正确地添加到目标HostNameURL 没有任何影响.

现在,您只需确保您的origin(或任何remote一般)网址与Host您各自的回购中的正确网址相匹配,具体取决于您的用户名.如果您已有现有的个人仓库,则可以.git/config在文本编辑器中编辑该仓库的文件:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@personal.github.com:PERSONAL_GITHUB_USERNAME/project.git
Run Code Online (Sandbox Code Playgroud)

或者通过命令行执行:

git remote set-url origin git@personal.github.com:PERSONAL_GITHUB_USERNAME/project.git
Run Code Online (Sandbox Code Playgroud)

同样对你的工作一:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@work.github.com:your_work_organization/project.git
Run Code Online (Sandbox Code Playgroud)

或者再次通过命令行:

git remote set-url origin git@work.github.com:your_work_organization/project.git
Run Code Online (Sandbox Code Playgroud)

当然,您可以随时Host~/.ssh/config文件中设置其中一个网址

Host github.com
Run Code Online (Sandbox Code Playgroud)

我以前只是work.github.com更容易看到配置关系.

一旦完成这些设置,您应该能够推送到每个相应的遥控器.

编辑

有一点需要注意的是,我刚刚发现自己,如果你曾为你的user.email价值设置全局git配置值(我猜user.name也会发送不同的值),git会将你的提交显示为该电子邮件用户.要解决此问题,您可以覆盖本地存储库中的全局git配置设置:

$ git config user.name "John Doe"
$ git config user.email johndoe@example.com
Run Code Online (Sandbox Code Playgroud)

现在应该将提交作为该repo的正确用户发送.

  • 奇迹般有效.谢谢! (3认同)
  • 最有帮助的回答肯定.谢谢一堆. (3认同)

Raj*_*til 40

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

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

  • 这解决了我在Windows10中运行Git Bash时遇到的问题.谢谢@ rajan-patil (3认同)

yut*_*mmo 36

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

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

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

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

  • +1!这是一个非常好的解决方案,可以在您不想安装私钥等的情况下从借用机器等进行一次性推送. (2认同)
  • 请注意,您可以执行`git push https://用户名:传递@ github.com/user/repo.git`如果您在shell历史记录中使用`pass`就可以了 (2认同)

Wal*_*ndt 33

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

因此,当您尝试作为个人帐户推送时,您需要确保您的工作帐户的密钥环不在您的密钥环中,反之亦然.使用ssh-add -l以确定哪些键是在你的钥匙圈,并ssh-add -d keyfile删除从你的钥匙圈的关键.

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

  • 如有必要,您还可以使用`GIT_SSH`环境变量来告诉git对ssh使用不同的命令; 特别是,您可以使用特定的密钥.请参阅[主要git手册页](http://www.kernel.org/pub/software/scm/git/docs/#_other),或者[问题](http://stackoverflow.com/questions/ 3496037 /如何到指定-这-SSH密钥使用的中之混帐换混帐推按顺序到有-GITO). (3认同)

小智 12

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


Rya*_*yan 10

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

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

ssh -T git@github.com
Run Code Online (Sandbox Code Playgroud)

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


ask*_*der 6

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

2月22日更新:

看看这个链接:https://gist.github.com/2351996


小智 6

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

屏幕截图示例

  • 进入钥匙串访问(osX)

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

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

希望这可以帮助!