跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

git同一台电脑配置多个账号【教程】

能配,但必须同时清除全局 user.name/user.email、为各账号生成独立 SSH 密钥、用 ~/.ssh/config 绑定 Host 与私钥;缺一即导致 Permission denied 或作者信息错乱。 直接说结论:能配,但必须同时处理三件事——清掉全局
user.name
user.email
、为每个账号生成独立 SSH 密钥、用
~/.ssh/config
绑定 Host 别名与私钥。漏掉任意一环,push 时就会报
Permission denied (publickey)
或提交人显示错账号。 为什么 git config --global --unset user.name 必须做 Git 提交时的 author 信息默认按 global → local 顺序继承。如果留着全局配置,哪怕你给某个仓库单独设了
git config --local user.name
,只要 clone 后没手动进仓库配一次,第一次 commit 就会套用全局值——结果是代码推到 GitHub,作者却显示成 Gitee 账号名。 执行
git config --global --list
确认输出里没有
user.name
user.email
别信“我只用 local 配置就够了”,很多 GUI 工具(如 VS Code 内置 Git)会跳过 local 检查,直取 global 清除后,每个仓库都得进目录单独跑一遍
git config --local user.name "xxx"
git config --local user.email "xxx@xxx.com"
ssh-keygen 命名不带下划线或点,否则 Windows 下可能失效 Windows 的 OpenSSH 客户端对文件名敏感,
id_rsa_github.com
id_rsa-github
在部分 Git for Windows 版本中会被忽略。实测稳定写法是纯字母 + 数字 + 下划线,且不能以数字开头。 正确示例:
ssh-keygen -t rsa -C "me@github.com" -f ~/.ssh/id_rsa_gh
错误示例:
id_rsa.github
01_gitee
id-rsa-gitlab
生成时密码建议直接回车空过,否则每次 push 都要输——除非你在公司强制要求密钥口令 公钥上传前用
cat ~/.ssh/id_rsa_gh.pub
看一眼,确认开头是
ssh-rsa AAAA...
,不是乱码或换行截断 ~/.ssh/config 的 Host 名必须和 git remote URL 里的主机名完全一致 很多人卡在这步:明明 config 里写了
Host github.com
,但 clone 用的是
git@github.com:xxx/yyy.git
,却还是走默认密钥。问题出在 SSH 匹配逻辑——它只认 URL 中
@
后面第一个词,且不解析路径。 Git 程序猿必备版本控制工具 下载 如果你的 remote 是
git@github.com:xxx/yyy.git
,config 的
Host
必须写
github.com
(不能写
mygithub
) 如果你想用别名(比如避免改所有 remote),就得把 remote 改成
git@mygithub:xxx/yyy.git
,同时 config 里对应写
Host mygithub
HostName
字段才是真实域名,比如
HostName github.com
IdentityFile
路径推荐用正斜杠,Windows 下也认:
IdentityFile ~/.ssh/id_rsa_gh
测试是否生效:运行
ssh -T git@github.com
,返回
Hi xxx!
才算通;如果还报权限拒绝,说明 config 没加载或路径写错 git remote add 时 URL 主机名要和 config 对齐 这是最容易被忽略的操作衔接点。config 配好了,但你 clone 或 add remote 时仍用原始域名,SSH 根本不会去查 config 里的别名映射。 假设 config 里定义了
Host gitee-work
,那 remote 地址必须是
git@gitee-work:username/repo.git
,不是
git@gitee.com:...
已有仓库想切换账号?先
git remote set-url origin git@gitee-work:username/repo.git
,再 push 别依赖 GitHub Desktop 或 Sourcetree 的图形界面自动识别——它们常缓存旧 remote,手动改完记得重启客户端 检查当前 remote:
git remote get-url origin
,确保输出里的主机名和 config 的
Host
项一致 真正麻烦的从来不是生成密钥或写 config,而是每个环节的命名和 URL 必须咬死对齐:config 的 Host、remote 的主机名、
git config --local user.email
的邮箱,三者缺一不可地指向同一个账号身份。稍有错位,错误信息就只会冷冰冰地报 “Permission denied” 或 “author mismatch”,不会告诉你哪一环断了。

相关文章