Git权限错误:使用个人GitHub账号推送代码遭拒求助
解决GitHub多账号推送时本地配置不生效的问题
我之前也碰到过一模一样的窘境!全局Git配置是工作账号的信息,本地个人项目仓库特意单独设置了个人账号的user.name和user.email,结果推送代码时还是默认用工作账号去验证,直接被提示无权限。
其实这里有个很容易混淆的点:你设置的user.name和user.email只是用来标记代码提交的作者信息,真正和GitHub通信、验证身份的是本地存储的凭据(HTTPS的token/密码缓存,或者SSH密钥)——这俩是完全独立的东西,所以光改作者信息没用。
下面分两种常用的连接方式给你解决办法:
如果你用的是HTTPS连接
清理旧的凭据缓存
你的电脑可能已经缓存了工作账号的GitHub凭据,推送时直接用了缓存的信息。- Windows:打开「控制面板」→「凭据管理器」→「Windows凭据」,找到所有和
github.com相关的条目,删掉它们。下次推送时Git会重新弹出验证窗口,输入个人账号的token即可。 - Mac:打开「钥匙串访问」,搜索
github.com,删掉对应的密码条目,之后推送时重新输入个人token。 - Linux:如果用的是
libsecret作为凭据助手,可通过对应工具(比如GNOME的「密码和密钥」)删除GitHub相关条目。
- Windows:打开「控制面板」→「凭据管理器」→「Windows凭据」,找到所有和
给本地仓库单独绑定凭据(一劳永逸)
如果你不想每次都清理缓存,可以给这个个人项目仓库单独设置凭据存储:# 进入个人项目仓库目录 cd /path/to/your/personal/repo # 设置当前仓库的凭据存储文件 git config credential.helper store --file .git/credentials然后在仓库的
.git/credentials文件里写入:https://<你的个人GitHub用户名>:<你的个人GitHub访问token>@github.com这样这个仓库每次推送都会用这个指定的凭据,不会再用全局的。
如果你用的是SSH连接
SSH密钥是和GitHub账号绑定的,全局如果默认用的是工作账号的密钥,个人仓库需要单独指定密钥:
- 生成个人账号的SSH密钥(如果还没的话)
生成时注意保存路径,比如设为ssh-keygen -t ed25519 -C "你的个人GitHub邮箱"~/.ssh/id_ed25519_personal,不要覆盖工作账号的密钥。 - 将个人公钥添加到个人GitHub账号
把生成的id_ed25519_personal.pub文件内容复制,粘贴到个人GitHub账号的「Settings」→「SSH and GPG keys」里,添加新的SSH密钥。 - 让本地仓库使用个人密钥
进入个人项目仓库,执行:
这个命令会让当前仓库在推送时强制使用个人的SSH密钥,忽略全局的SSH配置。git config core.sshCommand "ssh -i ~/.ssh/id_ed25519_personal -F /dev/null"
验证配置是否生效
做完上面的步骤后,你可以验证一下:
- 确认本地仓库的作者信息正确:
输出应该是你个人账号的用户名和邮箱。git config user.name git config user.email - 验证身份凭据:
- HTTPS方式:执行
git credential fill <<<"url=https://github.com",会显示当前使用的用户名,确认是个人账号。 - SSH方式:执行
ssh -T git@github.com -i ~/.ssh/id_ed25519_personal,如果返回Hi <你的个人用户名>! You've successfully authenticated...就说明没问题了。
- HTTPS方式:执行
内容的提问来源于stack exchange,提问作者Pro Q
相关产品推荐
相关产品推荐

