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

标签 git permissions github

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

现在我又想在我的个人账户上创建一个新的仓库,我改变了全局和本地的user.name,并做了一个新的ssh key 对,进入GitHub设置页面。然后我设置目录

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

但那现在告诉我

ERROR: Permission to personaluser/newrepo.git denied to

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

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

最佳答案

这听起来与我目前的工作设置非常相似。似乎您已经设置了单独的 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)url 与您各自 repos 中的正确 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 来更轻松地查看配置关系。

一旦这些都设置好了,您应该能够推送到每个相应的 Remote 。

编辑

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

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

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

关于Git 以错误的用户身份推送到远程 GitHub 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4665337/

相关文章:

jenkins - `env.BRANCH_NAME` 变为 `PR-1`

java - 使用 JGit 获取文件、修改内容并提交

git clone 权限被拒绝(gitosis)

PostgreSQL 撤销 pg_catalog 表的权限

类似 Github 的托管,带有私有(private)资源,公共(public)票务系统

git - 如何验证和显示 git 提交消息的错误?

git - 避免使用 git-multimail 的任何 emailPrefix

git - 如何防止 git clone --filter=blob :none --sparse from downloading files on the root directory?

linux - 公共(public) Samba 共享配置 - 不可写?

android - 转到我的应用程序的应用程序权限屏幕