我有一个工作 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/