2025-05-18  2025-05-18    1581 字  4 分钟
- 编程

Git 多账号推送远程仓库完整流程(含 SSH 多密钥配置)

一、基础 Git 推送流程(单账号)

# 1. 初始化本地仓库
git init
# 2. 添加所有文件到暂存区
git add --all
# 3. 提交到本地仓库
git commit -m "test"
# 4. 添加远程仓库(默认命名为 origin)
git remote add origin [email protected]:yourname/repo.git
# 5. 查看当前远程地址配置
git remote -v
# 6. 推送代码到远程仓库的 main 分支
git push -u origin main

注意:在第 6 步中,Git 会:

  • 查找 origin 对应的远程地址(如 [email protected]:yourname/repo.git);
  • 尝试通过 SSH 连接 [email protected]
  • 使用默认的私钥(通常是 ~/.ssh/id_rsa 或 ~/.ssh/id_ed25519)来进行身份验证;
  • 成功后将本地 main 分支推送到远程仓库。

二、理解 origin 和 git@… 的含义

概念 含义
origin Git 中远程仓库的本地别名,默认用于标识克隆来源
[email protected]:yourname/repo.git GitHub 的 SSH 远程仓库地址
git SSH 登录用户(GitHub 固定使用 git
github.com 远程主机名(可以通过 ~/.ssh/config 设置别名)

三、支持多个 GitHub 账号的 SSH 配置方法

如果你有多个 GitHub 账号(如:个人账号 + 公司账号),建议为每个账号生成独立 SSH 密钥,并通过 ~/.ssh/config 配置 Host 别名。

1. 生成多个 SSH 密钥对

运行下面的命令,生成多个密钥对,并将各自的 .pub 文件内容添加到对应 GitHub 账号 → Settings → SSH and GPG keys

# 个人账号密钥
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_personal
# 公司账号密钥
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_work

2. 配置 SSH config 文件(~/.ssh/config)

在文件夹 ~/.ssh/ 中创建一个config文件(无后缀),并编辑如下: 其中 Host github-personal 是 SSH 的主机别名,后续远程地址就可以用这个别名代替 github.com

# 个人账号配置
Host github-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal

# 公司账号配置
Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work

3. 设置 Git 仓库远程地址使用对应 Host

# 使用个人账号
git remote set-url origin git@github-personal:yourname/repo.git
# 使用公司账号
git remote set-url origin git@github-work:company/repo.git

4. 验证当前使用的身份

ssh -T git@github-personal
# 输出应为:Hi yourname! You've successfully authenticated...
ssh -T git@github-work
# 输出应为:Hi company! You've successfully authenticated...

5. 在相应的仓库执行push操作

在不同仓库中执行下面操作push代码。

git push -u origin main

此时这个仓库中origin对应的是git@github-×××:yourname/repo.git ,由于在config中配置了不同×××对应的ssh私钥,因此在不同的仓库执行push操作就会使用相应的ssh私钥认证。

总结

想要push代码到远程库

  1. git init 初始化仓库
  2. git add –all 添加暂存区
  3. git commit -m “test” 提交本地库
  4. git remote add origin [email protected]: ….. 增加远程库 origin ,他的地址为 git@…..
  5. git remote -v 查看当前远程库是什么
  6. git push -u origin main 将main分支提交到远程库origin中

在执行"git push -u origin main"时,Git 会首先解析 origin 远程地址中配置的主机名(例如 [email protected]:…),并尝试通过 SSH 使用默认密钥进行身份验证,完成与远程仓库的连接。

当一台机器上配置了多个 GitHub 账号,并为每个账号生成了对应的 SSH 密钥对时,可以通过编辑 ~/.ssh/config 文件,为 github.com 设置不同的主机别名,并为每个别名绑定特定的私钥路径,从而实现账号之间的隔离。

例如,将远程地址设置为 “git@custom-alias:username/repo.git”,然后通过:“git remote set-url origin git@custom-alias:username/repo.git"替换 origin 的 URL,Git 在执行 push 时会识别到该地址中的主机名为 custom-alias,从而查找 SSH 配置中与该别名对应的密钥,使用对应账号进行认证。这也可以在首次添加远程时直接设置为别名,避免后续修改: “git remote add origin git@custom-alias:username/repo.git”。

注意:

在jetbrains的工具中使用git push的时候,工具会弹窗让用户选择使用哪一个ssh密钥,如果不选择,默认会使用它的git agent管理ssh密钥,这会和.ssh中config文件中的配置冲突。

因此,在jetbrains中push代码时,如果出现这个弹窗,记得选择正确的ssh密钥。也可以使用其他支持 git 命令的工具push代码,这样就会按照config中的配置自动选择相应的ssh密钥。