在实际开发中,我们经常需要在同一台电脑上使用多个 Git 账号,例如:

  • 个人 GitHub 账号
  • 公司 GitHub 账号
  • GitLab 账号
  • Gitee 账号

如果直接使用默认 Git 配置,很容易遇到这些问题:

  • git push 时使用了错误的账号
  • 提交记录显示成了另一个账号
  • SSH Key 不知道应该使用哪一个
  • 不同项目频繁修改 user.nameuser.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 等不同代码仓库都可以同时使用,互不干扰。