Git以错误用户身份推送到远程GitHub存储库
Posted
技术标签:
【中文标题】Git以错误用户身份推送到远程GitHub存储库【英文标题】:Git pushing to remote GitHub repository as wrong user 【发布时间】:2011-06-07 14:40:27 【问题描述】:我有一个工作 GitHub 帐户和一个个人帐户。首先,我将个人帐户用于测试项目,然后我继续使用同一台计算机上的另一个帐户创建了一个存储库。
现在我想再次在我的个人帐户上创建一个新的存储库,我更改了全局和本地user.name
,并在 GitHub 设置页面中输入了一个新的 ssh 密钥对。然后我设置目录
git init
git remote add origin <url>
git push origin
但现在告诉我
错误:personaluser/newrepo.git 的权限被拒绝
我不知道另一个帐户是如何连接到这个帐户的。 .git/config
没有显示与 workusername
相关的内容。
如果您使用的是 Windows 10,请花点时间阅读 Rajan 的回答。
【问题讨论】:
对于 Windows 10,请在下面回答。从凭据管理器中删除凭据。浪费了 2 个小时的时间。 @xenteros 请将此作为答案发布。我失去了 1 小时,而你又救了我 1 小时。 【参考方案1】:这听起来与我目前的工作设置非常相似。看来您已经设置了单独的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
url。
现在您只需要根据您的用户名确保您的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
当然,您始终可以在您的 ~/.ssh/config
文件中设置您的 Host
网址之一
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
这现在应该以该 repo 的正确用户身份发送提交。
【讨论】:
像魅力一样工作。谢谢! This site 为感兴趣的人更全面地解释了 ssh config 文件。 肯定是最有帮助的答案。非常感谢。 太棒了!非常感谢! 我缺少的关键是在 .git/config 中指定 ssh 主机 - 非常感谢!【参考方案2】:转到控制面板 > 用户帐户 > 凭据管理器 > 通用凭据
删除 git 凭据。然后运行 git push。这将提示询问 git 凭据。输入正确的凭据。
【讨论】:
这解决了我在 Windows10 中运行 Git Bash 时遇到的问题。谢谢@rajan-patil 没有英文windows GUI的可以在命令行输入control /name Microsoft.CredentialManager
进入凭证管理器
奇怪,但它只有在我启动 Git Bash 时才有效(如上所述),但如果我继续使用同一个终端,我用 git push >error - 即使在终端重新启动后,它也会一直抛出相同的错误。但是无论如何,谢谢你 - 最后它为我节省了很多时间
这绝对是我遇到的最好的答案。其余的都很复杂,但这既简单又精确。
这工作一次。再次添加帐户后,同样的问题继续出现。【参考方案3】:
您也可以只切换到 https,而不是 ssh。如果您使用 https,它将尊重 .git/config 设置。因此,在 .git/config 中,更改:
url = git@github.com:USER/PROJECT.git
到
url = https://USER@github.com/USER/PROJECT.git
(这些值在git项目页面,点击SSH
和HTTP
按钮获取新值);
【讨论】:
+1!对于不想安装私钥等的借用机器等进行一次性推送,这是一个非常好的解决方案。 我认为使用https
的唯一问题是每次执行push
时都必须输入用户/密码,除非有一些我不知道的 git 配置的
我知道这是超级旧的,但谢谢。我的机器没有为 ssh 设置,但它仍在尝试推送到我的工作 github 帐户而不是我的个人帐户以进行一次性推送。在我的项目目录中的 .git/config 中使用它并且效果惊人。耶!为你点赞。
请注意,您也可以使用git push https://username:pass@github.com/user/repo.git
...如果您对 shell 历史记录中的 pass
没问题
这是最好的解决方案。谢谢!【参考方案4】:
github 通过它看到的 ssh 密钥来识别你,而不是通过 git 的任何设置。
因此,当您尝试作为个人帐户推送时,您需要确保您的工作帐户的 ssh 密钥不在您的密钥环中,反之亦然。使用ssh-add -l
确定您的密钥环中有哪些密钥,并使用ssh-add -d keyfile
从您的密钥环中删除密钥。
此外,如果您已将其配置为向 github 提供某些 ssh 密钥,您可能需要检查 ~/.ssh/config
。最后,我不知道 github 是如何处理具有相同 ssh 公钥的两个帐户的,所以请确保不要那样做。
【讨论】:
如果需要,你也可以使用GIT_SSH
环境变量告诉git使用不同的ssh命令;特别是,您可以让它使用特定的密钥。请参阅main git man page 或this question。
在我的系统(OSX 10.5)上,从密钥环中删除密钥的命令是ssh-add -d keyfile
谢谢@Motin,这就是我想说的。已编辑。
如果一个人需要两个密钥环怎么办,因为他们有两个不同的 github 帐户和不同的 ssh 密钥?【参考方案5】:
我遇到了同样的问题。事实证明,我在 GitHub 上有两个使用相同 SSH 密钥的帐户,而 GitHub 默认使用了错误的帐户,该帐户没有我所追求的 repo 的权限。我从我没有使用的帐户中删除了 SSH 密钥,一切都按预期工作。
您可以测试 GitHub 使用哪个帐户对自己进行身份验证:
ssh -T git@github.com
对我来说,这最初显示了错误的用户名,但在从该帐户中删除了重复的 SSH 密钥后,它显示了正确的用户名,并且我的拉取和推送到我的仓库运行良好。
【讨论】:
【参考方案6】:我最近遇到了同样的问题,因为我创建了一个新的 github 帐户。我试过上面的答案,但没有帮助。然后我在某处看到一篇关于从 Keychain Access 中删除 github 的帖子(仅当您使用 mac 时)。当我 git push 时,它会要求输入用户名和密码,并且成功了!
【讨论】:
@Carpetsmoker 听起来 OP 正在提供特定于 Mac 的解决方案。 请尝试找到原帖并添加为链接。 ***.com/questions/11067818/…【参考方案7】:我知道这可能有点晚了,但我坚持了很长一段时间,最后像这样修复它:
进入钥匙串访问(osX)
搜索 git(确保您已选择所有项目)
您将在此处找到罪魁祸首凭据。删除它们。希望这会有所帮助!
【讨论】:
这是唯一对我有帮助的答案! 这个答案帮助我解决了 mac 中的问题。【参考方案8】:这是一种方法:您可以为不同的 ssh 帐户使用不同的 ssh 配置。
2 月 22 日更新:
查看此链接:https://gist.github.com/2351996
【讨论】:
链接的 Gist 和 Gist 页面上的第一条评论非常适合我。我认为这比 Walter Mundt 的回答要好,因为您可以在钥匙圈上留下多个钥匙,一切都“正常工作”。【参考方案9】:如果更改与帐户关联的 SSH 密钥不起作用,请更改与该帐户关联的电子邮件。
转到 Github > 帐户设置 > 电子邮件并验证您用于提交的电子邮件地址与帐户上的电子邮件是否匹配。
要查看您用于提交的电子邮件地址,请运行以下命令:git config --global user.email
。如果您需要更改用于提交的电子邮件地址,请运行 git config --global user.email "your_email@youremail.com"
。
【讨论】:
【参考方案10】:我遇到了同样的问题。以下是我的情况:
我之前让 git 每次与远程存储库交谈时都不会询问我的凭据: git config --global credential.helper wincred
我通过使用“none”替换“wincred”运行相同的命令解决了这个问题 git config --global credential.helper none
然后 git 再次询问我的用户名/密码,一切顺利
【讨论】:
【参考方案11】:我也遇到了这个问题,即使在我删除了我的 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/
【讨论】:
【参考方案12】:我也遇到了这个问题,但没有其他解决方案适合我。事实证明,为了工作,我们创建了一个 .netrc
文件,其中包含 github 身份验证条目。 git
命令总是使用.netrc
,它有我的旧用户名和密码。我必须编辑 .netrc
文件中的条目才能使用新的用户名和密码。
【讨论】:
【参考方案13】:我找到了一个临时解决方案,首先运行killall ssh-agent
,然后添加为您需要使用ssh-add ~/.ssh/id_4shameer
的帐户生成的ssh密钥
当我们会收到ERROR: Permission to user/repo-git.git denied to username
类型的错误时,这是我们可以在多个 github 帐户上工作的一种方式。
【讨论】:
【参考方案14】:在工作之前从未遇到过 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 密钥的行(我以前从未这样做过并且多年来一直使用 zsh)。
该行应如下所示:
# ssh
export SSH_KEY_PATH="~/.ssh/<your_rsa_id>"
完成此操作后,只需在终端中运行 reset
即可,一切正常。
我希望这对其他人有所帮助。
【讨论】:
【参考方案15】:我想添加 - 如果您正在使用其他用户的帐户,请确保您将自己添加到存储库设置下的协作者区域。
【讨论】:
以上是关于Git以错误用户身份推送到远程GitHub存储库的主要内容,如果未能解决你的问题,请参考以下文章