Git 账号在一台电脑关联多个版本仓库 | Git 多账号 ssh-key 管理 | Github 和 Gitlab 共同使用

问题

使用电脑已存在的 ssh-key 直接添加到版本仓库,这是新手配置时候很容易犯的错误。

相关报错:OpenSSL SSL_read: Connection was reset, errno 10054
Bug0015

场景

在一台电脑上登录 git,但是要操作多个版本仓库如 GitLab 和 GitHub,但是版本仓库的邮箱可能不一样。

原因/解析

两个版本仓库添加同一个 ssh-key,会导致一个 ssh-key 的邮箱不对。

如何生成 ssh-key ,下文解决方案第一步给出。

代码托管网站主要看 email( email邮箱涉及到 Git 这个版本控制工具邮箱和版本仓库 GitLab 或者 GitHub 绑定的邮箱)来识别身份,用自己的版本控制工具 Git 的 email 地址来匹配版本仓库 GitLab 或者 GitHub 账户名的邮件地址,如果相同,代码托管网站就认为此操作是账户所有者的操作。比如:

如果本地设定的user.email值是:personal@126.com,由于在GitHub上的账户的邮件地址也是personal@126.com,如果从这台电脑push的话,GitHub会认定这次这个push是账户拥有者自己做的,跟直接登录到GitHub,从网站上修改,是相同的,修改人是一样,就是账户拥有者。

这篇文章对Git用户名与Github账户关系的理解,对用户名邮箱等分析的可以说比较透彻。也是解决 github 和 gitlab 共同使用关键。

解决方案

思路

1、为 Github 和 Gitlab(两个及以上 GitHub 账号同理) 生成不同的 ssh-key,并给予不同的命名如下,保存到指定位置。
2、添加ssh-key到版本仓库(Github、Gitlab、Gitee)

步骤

1个 Github + 一个 Gitlab

1、生成ssh-key

进入命令行输入如下指令,生成ssh-key

# 为 github 生成ssh-key 	-f 后面是指定生成文件名字
ssh-keygen -t rsa -C "github 绑定的邮箱" -f C:/Users/xxx/.ssh/id_rsa_github
# id_rsa_github.pub是github的ssh-key

# 为gitlab生成ssh-key	
ssh-keygen -t rsa -C "gitlab 绑定的邮箱" -f C:/Users/xxx/.ssh/id_rsa_gitlab
# id_rsa_gitlab.pub是 gitlab 的 ssh-key

2、创建 config 文件
在 .ssh 文件夹下创建 config 文件,注意无后缀就直接命名 config
令不同 Host 实际映射到同一 HostName,但密钥文件不同。

Host github
    HostName github.com
    IdentityFile ~/.ssh/id_rsa_github

Host gitlab
    #HostName [IP or host] 
    HostName 1xx.6x.xx.xx      
    IdentityFile ~/.ssh/id_rsa_gitlab
                                                                      
Host github2
    HostName github.com
    IdentityFile ~/.ssh/id_rsa_github2

配置文件解析

 #Host myhost(myhost为自定义的host简称,连接远程服务器就可以用命令ssh myhost)[注意下面有缩进]
     #User 登录用户名/账号邮箱(如:git/xxxxx2@xx.com) 
     #HostName 主机名可用ip也可以是域名(如:github.com)
     #Port 服务器open-ssh端口(默认:22,默认时一般不写此行)
     #IdentityFile 证书文件路径(如~/.ssh/id_rsa_*)

3、测试连接

测试连接是否成功,执行命令并出现下面情况说明成功!

ssh -T git@gitlab
# 出现:Welcome to GitLab, 用户名!

ssh -T git@github   #ssh -T git@github.com 也可,但是注意两个GitHub账号就不能区分了,下文有介绍
# 出现:Hi 用户名! You've successfully authenticated, but GitHub does not provide shell access.


两个GitHub账号时建议(原理同上)

注意此时ssh -T git@github.com如果配置两个github账号时会有报错,很明显生活显而易见的。

因此配置时建议入下:

Host github1.github.com
    HostName github.com
    User xxxxx@xx.com  # 账号邮箱
    IdentityFile ~/.ssh/id_rsa_github
                                                                 
Host github2.github.com
    HostName github.com
    User xxxxx2@xx.com  # 第二套账号邮箱
    IdentityFile ~/.ssh/id_rsa_github2

测试连接

ssh -T git@github1.github.com

ssh -T git@github2.github.com

其他优化

配置仓库, 让不同仓库的项目工作在不同目录

假如公司电脑 gitlab 用的比较多,gitlab 配置,可以全局配置

git config --global user.name 'username'
git config --global user.email 'username@gmail.com'	# 这里是公司gitlab用的邮箱

而对于 github 配置,可以单独创建一个目录,在该目录下存放github上的代码

cd E:/ProFiles/指定目录
git init
git config --local user.name 'username'
git config --local user.email 'username@gmail.com'	# 这里是github用的邮箱
posted @ 2022-06-20 20:44  Code7Rain  阅读(763)  评论(0编辑  收藏  举报