小王在公司做前端开发,上午用公司账号往内部 GitLab 提交代码,下午回家写个人开源项目,顺手 git clone 了一个 GitHub 仓库——结果一 push 就报错:remote: Permission to username/repo.git denied。他翻了三遍 SSH 配置,重装了 Git,最后才发现:不是权限问题,是本地 Git 默认用了公司邮箱和密钥,压根没切到自己的 GitHub 账号。
克隆仓库 ≠ 自动切换账号
很多人以为 git clone 时输对了 URL 就万事大吉,其实 Git 并不关心你 clone 的是谁的仓库,它只认本地全局配置里的 user.name 和 user.email,还有 SSH 密钥或 HTTPS 凭据。这些信息默认是“全局生效”的,一换就全换,一错就全错。
两种常用场景,对应两种解法
场景一:同一台电脑,不同项目用不同账号(最常见)
比如公司项目用 dev@company.com,个人项目用 me@gmail.com。这时别动全局配置,直接进项目目录改局部设置:
cd /path/to/personal-project
git config user.name "Zhang San"
git config user.email "me@gmail.com"这样这个项目里所有的 commit 都会带上你的个人身份,不影响其他项目。
场景二:HTTPS 方式 clone 后 push 报 403
尤其在 Windows 上,Git 会把账号密码存进 Windows 凭据管理器,而且只记一个。你 clone 公司仓库后,凭据里就存了公司账号;再 clone 个人 GitHub 仓库,它还是拿公司账号去试,当然被拒。
解决办法很简单:打开 Windows 设置 → 用户 → 凭据管理器 → Windows 凭据 → 找到 git:https://github.com 这类条目,删掉,下次 push 时会重新弹窗让你输新账号密码。
Mac 用户同理,在“钥匙串访问”里搜索 github.com 或 gitlab.com,删掉对应条目即可。
SSH 方式更省心,但得配好密钥
如果你习惯用 SSH,那关键不在 Git 配置,而在 ~/.ssh/config 文件。比如这样写:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github
Host gitlab.company.com
HostName gitlab.company.com
User git
IdentityFile ~/.ssh/id_rsa_company然后 clone 时用对应的 Host 别名:git clone git@github.com:me/project.git,Git 就会自动选对密钥,自然也就“切换账号”了。
办公中经常要来回切项目,与其反复折腾,不如养成习惯:新项目 clone 完第一件事,就跑一遍 git config --local user.name 和 git config --local user.email,两行命令,5 秒搞定,比查报错快多了。