【教程】在同一台电脑上管理多个 GitHub 账号的终极指南

2025 年 6 月 30 日 星期一(已编辑)
/ , , , ,
48
这篇文章上次修改于 2025 年 6 月 30 日 星期一,可能部分内容已经不适用,如有疑问可询问作者。

【教程】在同一台电脑上管理多个 GitHub 账号的终极指南

本文在 gemini-2.5-pro 的辅助下完成

在日常开发中,我们可能需要同时使用公司的 GitHub 账号和自己的个人账号。如果每次切换账号都需要重新配置或输入密码,会非常繁琐。本教程将引导你如何通过配置独立的 SSH 密钥和 Git 用户信息,实现无缝、自动地在多个账号间切换。

最终目标:将不同账号的项目存放在不同目录(如 ~/projects/work~/projects/personal),Git 将会自动为每个目录下的项目使用正确的 SSH 密钥进行认证,并配置正确的 user.nameuser.email 进行提交。


第一步:为每个账号生成独立的 SSH 密钥

我们需要为每个 GitHub 账号创建一对独一无二的 SSH 密钥(公钥和私钥)。

  1. 打开 Git Bash

  2. 为第一个账号 (account1) 生成密钥。 执行以下命令,将 [email protected] 替换为你的第一个账号的邮箱。

    # 推荐使用 ed25519 算法,更现代且安全ssh-keygen -t ed25519 -C "[email protected]"
    # 如果需要兼容旧系统,也可以使用 RSA 4096# ssh-keygen -t rsa -b 4096 -C "[email protected]"
    
  3. 当看到提示 Enter file in which to save the key (...) 时,不要直接按回车。为了区分不同账号的密钥,我们需要指定一个新文件名。例如,输入:

    /c/Users/YourUserName/.ssh/id_ed25519_account1
    

提示:你也可以使用 ~/.ssh/id_ed25519_account1~ 是用户主目录的简写,更通用。

  1. 接着会提示你输入密码(passphrase)。可以直接按两次回车设置为空密码,这样 Git 操作时无需再次输入。

  2. 为第二个账号 (account2) 生成密钥,重复上述过程,但确保使用不同的邮箱不同的文件名

ssh-keygen -t ed25519 -C "[email protected]"

在提示保存文件时,输入另一个文件名,例如:

/c/Users/YourUserName/.ssh/id_ed25519_account2
  

现在,你的 ~/.ssh 目录(即 C:\Users\YourUserName.ssh)下应该包含以下文件:

  • id_ed25519_account1 (私钥 - 绝不外泄)
  • id_ed25519_account1.pub (公钥 - 用于分享)
  • id_ed25519_account2 (私钥)
  • id_ed25519_account2.pub (公钥)

第二步:将公钥添加到对应的 GitHub 账号

你需要将每个公钥的内容分别添加到对应的 GitHub 账号中。

  1. 登录你的第一个 GitHub 账号 (account1)。

  2. 进入 Settings -> SSH and GPG keys

  3. 点击 New SSH key

  4. 复制公钥内容。打开 Git Bash,使用以下命令可以方便地将公钥内容复制到剪贴板:

cat ~/.ssh/id_ed25519_account1.pub | clip
  1. 将剪贴板中的内容粘贴到 GitHub 页面的 "Key" 文本框中。

  2. 为这个密钥取一个好记的标题(Title),例如 My-Windows-PC-Account1,以便将来识别。

  3. account2 重复此过程,确保复制的是 id_ed25519_account2.pub 的内容,并将其添加到 account2 的 SSH 密钥设置中。


第三步:配置 SSH 客户端以自动选择密钥

现在,我们需要告诉 SSH 客户端,在连接不同的 "主机" 时使用哪个私钥。这是通过 config 文件实现的。

  1. 在你的 ~/.ssh 目录下,创建一个名为 config 的文件(注意:没有扩展名)。如果文件已存在,直接编辑即可。

  2. 用你喜欢的文本编辑器(如 VS Code)打开 config 文件,并添加以下内容:

# 第一个账号 (account1) 的配置
Host github.com-account1
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_account1
IdentitiesOnly yes

# 第二个账号 (account2) 的配置
Host github.com-account2
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_account2
IdentitiesOnly yes

配置解释:

  • Host: 这是我们为真实主机创建的一个自定义别名。之后克隆或推送时,我们会用这个别名代替 github.com
  • HostName: 真实的主机名,这里就是 github.com
  • User: 连接 GitHub 时使用的用户名,固定为 git
  • IdentityFile: 指定该别名应使用的私钥文件路径。
  • IdentitiesOnly yes: 推荐添加此项,确保 SSH 只使用 IdentityFile 指定的密钥进行认证,避免尝试其他默认密钥导致认证失败。

第四步:测试连接

在 Git Bash 中,我们可以用 ssh -T 命令分别测试两个别名是否能成功连接到对应的 GitHub 账号。

# 测试 account1
ssh -T [email protected]

# 测试 account2
ssh -T [email protected]
  • 首次连接:你可能会看到一条关于主机真实性(fingerprint)的警告,输入 yes 并回车即可。
  • 成功响应:如果配置正确,你会看到类似 Hi account1! You've successfully authenticated... 的欢迎信息,证明你的密钥和账号已经成功关联。

第五步:在项目中使用新配置

配置完成后,关键在于如何在 Git 操作中使用我们定义的 Host 别名。

克隆新仓库

克隆仓库时,需要手动修改仓库的 SSH URL,将 github.com 替换为我们定义的别名。

修改已存在的仓库

如果你的电脑上已经克隆了项目,只需进入项目目录,修改其远程仓库 origin 的 URL。

# 假设当前仓库属于 account1
# 1. 查看当前远程 URL
git remote -v
# 2. 修改为使用别名的 URL
git remote set-url origin [email protected]:account1/some-repo.git
# 3. 再次查看,确认修改成功git remote -v

进阶:自动切换 Git 用户信息 (user.name 和 user.email)

到目前为止,我们解决了认证问题。但还有一个问题:所有仓库的 Git 提交记录(commit)都会使用全局配置的 user.nameuser.email。我们需要让 Git 根据项目目录自动切换作者信息。

这可以通过 Git 的 includeIf 指令完美解决。

思路

我们将不同账号的项目分别存放在不同的父目录下,例如:

  • C:\Users\YourUserName\projects\work` (用于 account1` 的所有项目)
  • C:\Users\YourUserName\projects\personal` (用于 account2` 的所有项目)

步骤 1: 创建独立的 Git 配置文件

  1. 在你的用户主目录(例如 ~C:\Users\YourUserName)下,创建两个新的 Git 配置文件:
    • .gitconfig-work
    • .gitconfig-personal
  2. 编辑 .gitconfig-work,写入 account1 的用户信息:
[user]
name = Your Name for Account1
email = [email protected]
  1. 编辑 .gitconfig-personal,写入 account2 的用户信息:
[user]
name = Your Name for Account2
email = [email protected]

步骤 2: 修改主 .gitconfig 文件

打开你主目录下的 .gitconfig 文件(位于 ~/.gitconfig),在文件末尾添加以下内容:

[includeIf "gitdir:~/projects/work/"]
path = ~/.gitconfig-work
[includeIf "gitdir:~/projects/personal/"]
path = ~/.gitconfig-personal

重要提示:

  • 路径必须使用正斜杠 /,即使在 Windows 系统中。
  • 路径末尾必须有斜杠 /,表示该目录及其所有子目录。
  • ~/ 是一个简写,代表你的用户主目录,Git 会自动识别它。

工作原理

现在,当你:

  • 在 ~/projects/work/ 或其任何子目录中执行 git 命令时,Git 会自动加载 .gitconfig-work 的配置,你的提交作者将是 account1
  • 在 ~/projects/personal/ 或其任何子目录中执行 git 命令时,Git 会自动加载 .gitconfig-personal 的配置,你的提交作者将是 account2

总结

恭喜你!通过以上设置,你已经搭建了一套完全自动化的多账号管理工作流:

  1. 克隆仓库时:根据账号选择正确的 Host 别名(如 [email protected]:...)。
  2. 存放项目时:将项目克隆到为其规划好的父目录(如 ~/projects/work)。

之后,无论是 git push/pull 进行认证,还是 git commit 记录作者信息,一切都会被自动、正确地处理。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...