You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不同本地GitHub项目如何配置不同用户名密码 解决推送403问题

问题根因

git config 中配置的 user.name、user.email 仅用于标记提交记录的署名信息,完全不参与HTTPS/SSH协议下的仓库权限认证。你遇到的403报错,本质是系统/ Git客户端缓存了userA账号的GitHub认证凭据,推送时Git优先读取了已缓存的凭据,和你配置的全局/本地级别署名没有关系,哪怕你本地的user.name改成任意字符串,只要缓存的凭据是userA的,推送时还是会以userA身份请求权限。

可落地解决方案

根据你当前用HTTPS协议推送的场景,优先选第一种方案,长期多账号使用推荐第二种SSH方案。

方案1:HTTPS协议下配置项目独立凭据

  • 第一步:清空已缓存的错误凭据
    • Windows:打开系统「凭据管理器」-「Windows凭据」,删除所有前缀为git:https://github.com的凭据条目
    • Mac:打开「钥匙串访问」,搜索github.com,删除所有关联Git的凭据条目
    • Linux:执行git credential-cache exit清空内存缓存,再删除~/.git-credentials文件中所有GitHub相关的条目
  • 第二步:进入需要用userB身份操作的项目目录,执行命令给当前项目单独配置认证用户名,配置仅对当前项目生效,不影响全局:
git config --local credential.https://github.com.username userB
  • 第三步:执行git push触发认证,按照提示输入userB账号对应的GitHub个人访问令牌(GitHub已废弃账号密码推送,令牌需勾选repo权限),认证通过后凭据会单独关联当前项目,后续推送不会再读取全局的userA凭据。
  • 校验:在项目目录执行git config --list --local,能看到credential.https://github.com.username=userB即为配置生效。

方案2:SSH协议多账号配置(长期使用更稳定,无凭据过期问题)

  • 第一步:为userB账号单独生成SSH密钥对,执行命令时注意不要覆盖原有userA的密钥文件,密钥文件名单独命名为id_ed25519_userB:
ssh-keygen -t ed25519 -C "userB@email.co.za" -f ~/.ssh/id_ed25519_userB
  • 第二步:复制生成的id_ed25519_userB.pub公钥内容,添加到userB对应GitHub账号的SSH密钥设置页。
  • 第三步:编辑SSH配置文件(路径为~/.ssh/config,不存在则新建空白文件),添加以下配置,为两个账号配置独立的主机别名:
# 全局默认userA账号配置
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519

# userB账号专属配置
Host github-userB
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_userB
  • 第四步:进入需要用userB操作的项目目录,修改远程仓库地址为别名形式:
git remote set-url origin git@github-userB:userB/some-project.git
  • 校验:执行git push无需输入密码即可完成认证,全程不会调用userA的任何配置。
避坑提示
  • 如果你使用第三方Git GUI客户端(SourceTree、GitHub Desktop等),需要额外检查客户端内置的凭据存储,多数客户端会独立缓存一套账号凭据,优先级高于系统凭据管理器。
  • 不要试图仅通过修改user.name/user.email切换账号身份,这两个配置只影响提交日志里的显示名,和仓库访问权限没有任何关联。

内容的提问来源于stack exchange,提问作者Wylie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:39:02