Git 多账号 ssh-key 管理( Github 和 Gitlab 共同使用)


1、问题

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

2、场景

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

3、原因/解析

两个版本仓库添加同一个 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 共同使用关键。

4、解决方案

为 Github 和 Gitlab 生成不同的 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

在 .ssh 文件夹下创建 config 文件,注意无后缀就直接命名 config

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

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

ssh -T git@gitlab
# 出现:Welcome to GitLab, 用户名!
ssh -T git@github.com
# 出现:Hi 用户名! You've successfully authenticated, but GitHub does not provide shell access.

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

假如公司电脑 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用的邮箱