在实际开发中,我们经常需要在同一台电脑上使用多个 Git 账号,例如:
- 个人 GitHub 账号
- 公司 GitHub 账号
- GitLab 账号
- Gitee 账号
如果直接使用默认 Git 配置,很容易遇到这些问题:
git push时使用了错误的账号- 提交记录显示成了另一个账号
- SSH Key 不知道应该使用哪一个
- 不同项目频繁修改
user.name和user.email - GitHub、GitLab 等多个平台的 SSH 配置互相干扰
解决这些问题,最稳定的方案是:
一个账号对应一套 SSH Key,通过 SSH Config 区分账号,再通过项目级 Git Config 确定提交身份。
下面以 Windows 为例,建立一套完整的 Git 多账号工作流。
一、先理解 Git 多账号的两个身份
配置之前,需要先区分两个很容易混淆的概念。
1. Git 提交身份
Git 每次提交都会记录:
user.name
user.email
例如:
git config user.name "zhangsan"
git config user.email "zhangsan@example.com"
它决定的是:
这次 Commit 是谁提交的。
2. Git 仓库认证身份
当执行:
git pull
git push
GitHub、GitLab 等服务器还需要判断:
你有没有权限访问这个仓库?
如果使用 SSH,这个身份由 SSH Key 决定。
因此:
Git Config
↓
决定 Commit 是谁提交的
SSH Key
↓
决定使用哪个账号访问远程仓库
这两个身份需要分别配置。
二、查看当前 Git 配置
首先查看全局配置:
git config --global --list
重点关注:
user.name=xxx
user.email=xxx
也可以分别查看:
git config --global user.name
git config --global user.email
如果以前只有一个 Git 账号,很可能已经配置了全局身份:
git config --global user.name "your-name"
git config --global user.email "your-email@example.com"
对于多账号环境,我更推荐:
不要依赖一个统一的全局 user.name / user.email,而是在不同项目中设置对应身份。
三、为不同账号生成不同 SSH Key
假设现在有两个 GitHub 账号:
个人账号:personal
工作账号:work
打开 PowerShell 或 Git Bash。
首先查看现有 SSH Key:
ls ~/.ssh
Windows 实际目录通常是:
C:\Users\你的用户名\.ssh
然后分别创建两套 Key。
个人账号:
ssh-keygen -t ed25519 -C "personal@example.com"
保存为:
~/.ssh/id_ed25519_personal
工作账号:
ssh-keygen -t ed25519 -C "work@example.com"
保存为:
~/.ssh/id_ed25519_work
最终目录类似:
.ssh/
├── id_ed25519_personal
├── id_ed25519_personal.pub
├── id_ed25519_work
└── id_ed25519_work.pub
其中:
id_ed25519_xxx
是私钥,绝对不要上传或发送给别人。
而:
id_ed25519_xxx.pub
是公钥,可以添加到 GitHub、GitLab 等代码托管平台。
四、将 SSH 公钥添加到代码托管平台
查看个人账号公钥:
cat ~/.ssh/id_ed25519_personal.pub
查看工作账号公钥:
cat ~/.ssh/id_ed25519_work.pub
复制对应内容,分别添加到对应 Git 账号的 SSH Keys 中。
例如:
personal GitHub
↑
id_ed25519_personal.pub
work GitHub
↑
id_ed25519_work.pub
这样,每个账号就拥有独立的 SSH 身份。
五、使用 SSH Config 区分不同账号
这是整个多账号配置中最关键的一步。
创建或编辑:
C:\Users\你的用户名\.ssh\config
注意文件名就是:
config
没有 .txt 后缀。
假设两个账号都使用 GitHub,可以配置:
# Personal GitHub
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# Work GitHub
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
这里最重要的是:
Host github-personal
和:
Host github-work
它们是我们自己定义的 SSH 别名。
实际上二者最终访问的都是:
github.com
但 SSH 会根据不同的 Host 别名选择不同的 Key。
也就是说:
github-personal
↓
github.com
↓
id_ed25519_personal
而:
github-work
↓
github.com
↓
id_ed25519_work
这样就解决了:
同一个 github.com 如何使用两个不同账号的问题。
六、测试两个 SSH 账号
配置完成后分别测试。
个人账号:
ssh -T git@github-personal
工作账号:
ssh -T git@github-work
如果配置正确,GitHub 会返回类似:
Hi username! You've successfully authenticated...
重点检查返回的用户名是否与预期账号一致。
如果两个命令分别识别成两个不同的 GitHub 用户,说明 SSH 多账号已经配置成功。
七、Clone 仓库时选择正确账号
普通 GitHub SSH 地址通常是:
git@github.com:user/repository.git
配置多账号以后,不再直接使用:
github.com
而是使用我们在 SSH Config 中定义的 Host。
例如个人项目:
git clone git@github-personal:personal-user/my-project.git
工作项目:
git clone git@github-work:company/my-project.git
注意:
github-personal
github-work
并不是真正的域名。
SSH 会根据:
~/.ssh/config
自动把它们映射到:
github.com
同时选择正确的 SSH Key。
八、已有仓库如何切换账号
如果项目已经 Clone 下来了,可以查看当前远程地址:
git remote -v
可能看到:
origin git@github.com:company/project.git
如果这是工作账号的项目,可以修改为:
git remote set-url origin git@github-work:company/project.git
再次检查:
git remote -v
应该变成:
origin git@github-work:company/project.git
以后执行:
git pull
git push
SSH 就会自动使用:
id_ed25519_work
进行认证。
九、为每个项目配置正确的 Git 身份
SSH 解决了“用哪个账号访问仓库”的问题。
接下来还要解决:
Commit 到底显示谁的名字和邮箱?
进入个人项目:
cd my-personal-project
设置:
git config user.name "personal-name"
git config user.email "personal@example.com"
进入公司项目:
cd my-work-project
设置:
git config user.name "work-name"
git config user.email "work@company.com"
注意这里不要加 --global。
例如:
git config user.email "work@company.com"
表示:
只对当前仓库生效。
而:
git config --global user.email "work@company.com"
则会影响整台电脑上的 Git 项目。
可以使用下面的命令确认当前项目最终使用的身份:
git config user.name
git config user.email
如果想进一步确认配置来自哪里:
git config --show-origin --get user.name
git config --show-origin --get user.email
十、推荐的完整多账号结构
最终,一个比较清晰的 Windows Git 多账号结构如下:
Windows
│
├── ~/.ssh/
│ │
│ ├── id_ed25519_personal
│ ├── id_ed25519_personal.pub
│ │
│ ├── id_ed25519_work
│ ├── id_ed25519_work.pub
│ │
│ └── config
│
├── Personal Project
│ │
│ ├── Git Config
│ │ ├── user.name = personal-name
│ │ └── user.email = personal@example.com
│ │
│ └── origin
│ └── git@github-personal:user/project.git
│
└── Work Project
│
├── Git Config
│ ├── user.name = work-name
│ └── user.email = work@company.com
│
└── origin
└── git@github-work:company/project.git
这里形成了两个相互独立的控制层:
项目 Git Config
↓
控制 Commit 身份
Remote URL
↓
SSH Config Host
↓
IdentityFile
↓
控制远程仓库认证身份
理解这一点,Git 多账号实际上就非常简单了。
十一、GitHub + GitLab + Gitee 同时使用
如果不是两个 GitHub 账号,而是多个不同平台,配置方式也是一样的。
例如:
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
Host gitlab-work
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_gitlab
IdentitiesOnly yes
Host gitee-personal
HostName gitee.com
User git
IdentityFile ~/.ssh/id_ed25519_gitee
IdentitiesOnly yes
以后根据仓库选择不同地址即可:
git@github-personal:user/project.git
git@github-work:company/project.git
git@gitlab-work:company/project.git
git@gitee-personal:user/project.git
所以这套方案并不依赖某个平台,本质上是利用 SSH Config 管理多个 SSH 身份。
十二、进一步优化:根据目录自动切换 Git 身份
如果项目很多,每个项目都手动执行:
git config user.name ...
git config user.email ...
还是比较麻烦。
Git 本身支持 includeIf,可以根据项目所在目录自动加载不同配置。
例如我们规定:
D:\project\personal\
D:\project\work\
分别存放个人和公司项目。
编辑:
~/.gitconfig
配置:
[includeIf "gitdir:D:/project/personal/"]
path = ~/.gitconfig-personal
[includeIf "gitdir:D:/project/work/"]
path = ~/.gitconfig-work
创建:
~/.gitconfig-personal
内容:
[user]
name = personal-name
email = personal@example.com
再创建:
~/.gitconfig-work
内容:
[user]
name = work-name
email = work@company.com
这样,只要项目位于:
D:\project\personal\
Git 就自动使用个人身份。
项目位于:
D:\project\work\
则自动使用工作身份。
最终可以做到:
Windows
│
┌─────────┴─────────┐
↓ ↓
D:\project\personal D:\project\work
│ │
↓ ↓
personal Git Config work Git Config
│ │
↓ ↓
github-personal github-work
│ │
↓ ↓
Personal SSH Key Work SSH Key
这也是我比较推荐的长期使用方式。
十三、日常使用流程
完成一次配置之后,日常开发其实非常简单。
个人项目:
cd D:\project\personal
git clone git@github-personal:user/project.git
工作项目:
cd D:\project\work
git clone git@github-work:company/project.git
以后正常使用:
git add .
git commit -m "update"
git pull
git push
即可。
不需要每天切换 GitHub 登录账号,也不需要反复修改 SSH Key。
总结
一台 Windows 电脑同时使用多个 Git 账号,本质上需要解决两个问题:
第一,Commit 使用谁的身份?
使用:
git config user.name
git config user.email
控制。
第二,Push 使用谁的权限?
使用:
SSH Config
↓
Host Alias
↓
IdentityFile
控制。
因此,一个比较稳定的多账号方案可以总结成:
一个 Git 账号
↓
一套 SSH Key
↓
一个 SSH Host Alias
↓
一个对应的 Remote URL
再结合:
Git includeIf
↓
根据项目目录
↓
自动选择 user.name / user.email
就可以在 Windows 上建立一套几乎不需要手动切换的 Git 多账号开发环境。
配置一次,以后个人项目、公司项目以及 GitHub、GitLab、Gitee 等不同代码仓库都可以同时使用,互不干扰。