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

我有一个工作GitHub帐户和个人。 首先,我使用个人testing项目,然后移动到另一个在同一台计算机上的另一个帐户存储库。

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

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

但现在告诉我

错误:个人用户/ newrepo.git拒绝的权限

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

这听起来与我目前的工作非常相似。 似乎你已经设置了单独的ssh-keys所以你还需要创build一个~/.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 

当然,你可以随时在你的~/.ssh/config文件中设置一个Host URL

 Host github.com 

我只使用work.github.com来查看configuration关系更容易。

一旦这些都设置完毕,你应该能够推送到每个相应的远程。

编辑

有一件事要注意,我刚刚发现自己是,如果你曾经为你的user.email值设置全局的gitconfiguration值(我猜猜user.name也会发送一个不同的值),git会显示你的提交为该电子邮件用户。 为了解决这个问题,你可以覆盖你的本地仓库中的全局gitconfiguration设置:

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

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

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

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

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

(这些值在git项目页面上,点击SSHHTTPbutton来创build新值);

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

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

另外,你可能需要检查~/.ssh/config如果你已经configuration它将某些ssh密钥提交给github。 最后,我不知道github如何处理具有相同ssh公钥的两个账户,所以请确保你不这样做。

进入控制面板>用户帐户>凭证pipe理器>通用凭证

删除git凭证。 然后运行git push。 这将提示要求提供git凭证。 input您的正确凭据。

我最近有同样的问题,因为我创build了一个新的github帐户。 我已经尝试了上面的答案,但没有帮助。 然后我看到一个关于从Keychain Access删除github的post(只有当你使用mac时 )。 当我推动,然后要求用户名和密码,它的工作!

我有同样的问题。 事实certificate,我在GitHub上有两个帐号使用相同的SSH密钥,而GitHub默认使用了错误的帐号,这个帐号没有我之前的回购权限。 我从帐户中删除SSH密钥,我没有使用所有按预期工作。

您可以testingGitHub使用哪个帐户进行身份validation:

 ssh -T git@github.com 

对我来说,这最初显示了错误的用户名,但从该帐户删除重复的SSH密钥后,然后显示正确的用户名和我拉,推到我的回购协议工作良好。

这是一个这样做的方法:你可以使用不同的SSHconfiguration为不同的SSH帐户。

2月22日更新:

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

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

转到Github>帐户设置>电子邮件,并validation您用于提交的电子邮件地址是否与该帐户中的电子邮件地址相符。

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

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

我以前做过git不要问我的凭据每次我与远程存储库通过这个:git config –global credential.helper wincred

我解决了这个问题,运行相同的命令“none”replace“wincred”git config –global credential.helper none

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

我也有这个问题,但没有其他解决scheme为我工作。 事实certificate,为了工作,我们创build了一个.netrc文件,其中包含githubauthentication的条目。 git命令总是使用.netrc ,它有我的旧用户名和密码。 我必须编辑我的.netrc文件中的条目以使用新的用户名和密码。

从来没有任何问题,直到工作,他们最近连接我们的MacBook活动目录,并添加了一些pipe理员帐户到我的机器。 然而,之后,git会正常工作,直到我locking我的屏幕,然后回来。 然后我会得到一个类似于模糊的错误

 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。 用户的电子邮件和名称是正确的,所以这不是问题。 Ergo,每次我locking我的机器后重新启动是徒劳的。 对我来说,解决scheme是编辑我的.zshrc文件,并取消导出ssh-key的行(我以前从来没有这样做过,并且已经使用了zsh多年)。

该行应该看起来像这样:

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

一旦你这样做,只需在terminal上运行reset ,一切正常。

我希望这可以帮助别人。

那么,我已经浪费了一整个上午,试图让我的两个github帐户正常工作。 我需要同时克隆,提交和推送。 所以,不知道所有的结局和出路,我强迫一个解决scheme,似乎对我来说很好。

基本上,我改变我的git和sshconfiguration文件,以匹配我将然后使用模态直到我再次切换的帐户。

我现在有两个帐户github,dhoerl和其他东西。 我有我的.ssh目录中的id_rsa文件单独的文件。 我必须ssh-add -D,然后ssh-add git_dhoerl,然后ssh-addOtherOne。

我有两个shell命令将我从一个configuration文件切换到另一个configuration文件。 每个看起来像这样:

 cd ~/.ssh rm id_rsa ln git_dhoerl id_rsa git config --global user.email "myEmailAddr" git config --global github.user "myAccountName" git config --global github.token "myToken" 

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

我遇到了这个问题以及上述解决scheme都没有工作,即使我删除我的SSH密钥,并做了一个新的。 原来,ssh-agent使用了一个caching的密钥,所以我必须运行killall ssh-agent ,然后才能正常工作。

在这里find解决scheme。 http://fzysqr.com/2012/08/28/quick-tip-wrong-ssh-key-cached-with-github-after-changing-users-and-keys/

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

这是我们可以在多个github帐户上工作的一种方式,当我们将得到ERROR: Permission to user/repo-git.git denied to usernametypes的ERROR: Permission to user/repo-git.git denied to username