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的正确用户发送.
Raj*_*til 40
转到"控制面板">"用户帐户">"凭据管理器">"通用凭据"
删除git凭据.然后运行git push.这将提示要求git凭据.输入正确的凭据.
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项目页面上,单击SSH和HTTP按钮以获取新值);
Wal*_*ndt 33
github通过它看到的ssh密钥识别你,而不是通过git中的任何设置识别你.
因此,当您尝试作为个人帐户推送时,您需要确保您的工作帐户的密钥环不在您的密钥环中,反之亦然.使用ssh-add -l以确定哪些键是在你的钥匙圈,并ssh-add -d keyfile删除从你的钥匙圈的关键.
此外,您可能需要检查~/.ssh/config是否已将其配置为向github提供某些ssh密钥.最后,我不知道github如何处理具有相同ssh公钥的两个帐户,因此请确保不要这样做.
小智 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密钥后,它显示了正确的用户名,我的拉动和推送到我的仓库工作得很好.