一台电脑同时使用 GitHub 和公司 GitLab

534 字
3 分钟
一台电脑同时使用 GitHub 和公司 GitLab

个人项目在 GitHub,公司项目在 GitLab,两边的账号、邮箱都不一样。要解决两个问题:

  1. 认证:两边用不同的 SSH 密钥;
  2. 身份:提交记录里的用户名和邮箱,个人项目用个人的,公司项目用公司的。

一、生成两套 SSH 密钥#

现在推荐用 ed25519 算法,比 RSA 更短更安全:

Terminal window
ssh-keygen -t ed25519 -C "个人邮箱" -f ~/.ssh/id_ed25519_github
ssh-keygen -t ed25519 -C "公司邮箱" -f ~/.ssh/id_ed25519_gitlab

然后把两个 .pub 公钥分别添加到 GitHub 和 GitLab 的个人设置里。

二、用 ~/.ssh/config 按域名选择密钥#

# 个人 GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
# 公司 GitLab
Host gitlab.example.com
HostName gitlab.example.com
User git
IdentityFile ~/.ssh/id_ed25519_gitlab
IdentitiesOnly yes

IdentitiesOnly yes 很重要:没有它,SSH 会先把 ssh-agent 里所有的密钥挨个试一遍,可能用错密钥,或者尝试次数过多被服务器断开。

配好后验证:

Terminal window
ssh -T git@github.com
ssh -T git@gitlab.example.com

三、按目录自动切换提交身份#

当年的做法是在每个公司仓库里手动执行 git config --local user.name/user.email,很容易忘。Git 2.13 之后可以用 includeIf,按仓库所在目录自动加载不同的配置。

~/.gitconfig:

[user]
name = 个人用户名
email = 个人邮箱
# work 目录下的仓库,自动使用公司身份
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work

~/.gitconfig-work:

[user]
name = 公司用户名
email = 公司邮箱

公司的项目都放在 ~/work/ 下面,提交时就会自动用公司身份。在仓库里执行 git config user.email 可以确认当前生效的是哪个。

四、遇到过的问题#

当时推送到公司 GitLab 时出现过这个报错:

ssh_exchange_identification: read: Connection reset by peer
fatal: Could not read from remote repository.

它的意思是 SSH 连接在握手阶段就被服务端断开了,还没轮到验证密钥,所以和密钥配置无关。常见原因是服务端限制了允许 SSH 的来源 IP(比如只放行公司内网或 VPN),或者短时间内连接次数过多被拦截。当时的临时办法是改用 HTTPS 地址推送;根本的解决办法是找管理员确认 SSH 访问策略。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

一台电脑同时使用 GitHub 和公司 GitLab
https://tracerzzz.cn/posts/gitlab-and-github/
作者
tracerZzz
发布于
2017-07-11
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
一家多诊室的医院:用类比理解 Go 的 GMP 调度
Go用"医院看病"的类比讲清楚 Go 的 GMP 调度:G、M、P、全局队列、偷任务、抢占、系统调用、netpoller 和 sysmon 各自做什么,顺带回顾用户态和内核态,对比 Python asyncio、Node.js 和 Go 的调度分层,最后用两个小程序亲眼看看调度器在干什么。
2
让 Mac 和 iPhone 指定网站走 eSIM:sing-box 分流实录
工具家里 Wi-Fi 访问一部分境外网站不稳定,iPhone 上的境外 eSIM 访问正常但流量很少。这篇记录怎么让 Mac(通过手机热点)和 iPhone 自己都只把指定网站分给 eSIM,其他流量照常走 Wi-Fi。最后两台设备共用一份 sing-box 配置,用 iCloud 同步,规则全部来自社区规则集,基本不用手动维护。附完整配置、一路补过的漏洞和换设备时的快速清单。
3
给 2016 款 MacBook Pro 装上 macOS Sonoma:OpenCore Legacy Patcher 实录
工具家里有一台 2016 款 15 英寸 MacBook Pro,官方最高只能升到 macOS 12,装不了要求 macOS 13 以上的新软件。用 OpenCore Legacy Patcher 把它升到了 Sonoma 14,这篇记录选版本的考虑、安装步骤,以及装完后遇到的屏幕闪烁、Wi-Fi 消失、指纹失效、iCloud 退不出去、睡眠唤醒死机这些坑。
4
让医生别闲着:用 Python 协程把成本数据产出提速十倍
工作在百度云 CDN 做成本分摊时,日均要对 Palo 发 80 万次以上的查询,大部分时间都花在等结果上。这篇用"医院看病"做类比讲清楚异步非阻塞,顺带对比多进程、多线程、协程三种并发方式,最后讲我先用单进程协程(asyncio + aiomysql)并发查询,再加上多进程、用队列汇总结果,把数据产出时间缩短到原来的十分之一的过程;最后对比浏览器、Node.js 和 Python asyncio 的事件循环调度原理。
5
CDN 新客户接入前的价格测算:用波形拟合算出最低成本价
工作火山 CDN 经营分析平台上的价格测算功能:销售拿到一个新客户的带宽打点,平台把它和大盘拟合,判断客户是否错峰、算出边际超卖倍数,再结合资源诉求的加权成本和包头系数,给出不同计费方式下的最低成本价。这篇讲它的输入、计算过程、示例和后续的优化方向。
随机文章随机推荐

评论区

Profile Image of the Author
tracerZzz
想当木匠的程序员!
分类
标签
站点统计
文章
19
分类
9
标签
48
总字数
79,096
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
ESA Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录