管理你的多个 Git 密钥(多平台多账号)

大家好,我是 CC,在这里欢迎大家的到来~

前序

这次的主题是对 Git 密钥的管理。在公司开发时,电脑.ssh配置了公司邮件地址的密钥,绑定了公司内部的代码仓库平台;但是当我们想访问私人的 Github 仓库时,就会发现不能正常的拉取和推送代码了,这是因为我们没有在公司电脑上配置私人 Github 仓库对应的邮箱生成的密钥。这样就产生了存在多个密钥的情况。

如何对这些密钥进行管理使得既方便项目的开发,也不会导致提交信息(User Name 和 User Email )的错乱呢?

操作流程

查看全局配置

lua 复制代码
git config --global -l

会看到之间全局配置的 Git 的提交信息,这里我们可以选择取消全局配置

css 复制代码
git config --global --unset user.name 
git config --global --unset user.email

不取消其实也可以,因为 Git Config的优先级中 local > global > system

只是当一个项目中未配置 local 的 Git 的话会默认使用 global

生成密钥

在生成新的密钥之前,可以看到 ~/.sshid_rsaid_rsa.pub,这是之前我们使用 rsa 加密的、使用公司的邮箱生成的密钥

现在我们需要生成一个新的密钥用于私人的 Github 账号

推荐使用 Ed25519 算法

javascript 复制代码
ssh-keygen -t ed25519 -C "私人邮箱地址" -f ~/.ssh/github_id_ed25519_a

如果使用两个相同的算法,需要指定不同的文件名,以免冲突

添加密钥

生成密钥后,在 ~/.ssh下会生成 id_ed25519id_ed25519.pub,把 id_ed25519.pub中的内容添加的 Github 配置中

配置

配置项目用户信息

在项目中配置使用的 Git 账号的信息,这样就能实现 Git 信息和私人 Github 的绑定

arduino 复制代码
git config --local user.name "xxxx"
git config --local user.email "xxxx"

使配置生效

css 复制代码
git commit --amend --reset-author

配置系统秘钥

在 ~/.ssh/config 文件中添加配置,我们可以把密钥添加到 ssh agent 这个密钥管理器,它会替代我们管理和代理多个密钥

bash 复制代码
Host github_a
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_a
  AddKeysToAgent yes
  UseKeychain yes
  • Host 配置名称
  • HostName 主机名 域名或IP地址
  • User 用户名
  • IdentityFile 使用的密钥
  • AddKeysToAgent 是否把密钥交给Agent管理
  • UseKeychain 给密钥添加口令

测试配置

r 复制代码
ssh -T github_a

总结

管理密钥的关键问题在于每个项目配置的 User Name 和 User Email。

除了以上这种情况,其实还存在:

  1. 多台电脑登录同一个 Github 账号,都进行推送拉取代码时,这是比较常见的情况,也是比较容易解决的。只需要在 Github 账号添加每台电脑的 Git 密钥就可以了。
  2. 同一台电脑用户有多个 Github 账号,比如一个是开源账号,一个是私人账号,这时候如何知道登录哪个账号去推送当前代码库的代码呢?

第二个问题我们后续去探讨。

参考文章

相关推荐
不怕犯错,就怕不做5 小时前
git prune 自动删除本地记录中那些远程已经不存在的分支引用
linux·服务器·git
峰向AI9 小时前
GenOffice:开源 Office 套件,字节级保留、本地转换、BYOK模式
github
ELI_He99910 小时前
如何还原已经推送的提交
git
其实防守也摸鱼11 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
m4Rk_11 小时前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github
️学习的小王12 小时前
Git项目提交忽略文件怎么做?以Python项目为例,详解.gitignore
git·python·elasticsearch
其实防守也摸鱼12 小时前
免杀与持久化入门:从载荷免杀到隐蔽通道的完整指南
运维·服务器·数据库·安全·github·copilot·渗透
sec_jay12 小时前
一个面向有限本地语料库的、单智能体、工具调用型 Agentic RAG 原型--关于agent的实践调研报告
github
愚蠢得人12 小时前
Git Worktree实用指南:同时开发两个分支,不再反复切换
git
goplaysource15 小时前
IPTV 频道去重:用哈希解决"同一个频道出现十遍"的问题
github