# WindowsPC同时配置GitLab和GitHub

需求简述

工作中使用的版本控制工具是公司内部搭建的GitLab,个人则使用GitHub

二者都基于Git开发,但是分属两个不同平台,并且我在这两个平台注册的账号还是不同的邮箱以及不同的用户名。。

git config --global user.name 'xxxx'git config --global user.email 'xxxx@xxx.com'配置的是全局用户名和邮箱。为消除不便,此时需要为办公电脑同时配置GitLabGitHub

参考资料

亲测本地电脑同时配置gitlab和github账号 (opens new window)

# 一、原理

根据参考资料,要想在同一台电脑上同时配置GitLabGitHub,只要确保三点:

  • 保存两份不同的SSH Key各自对应自己的平台;
  • 提交代码时能够正确使用对应平台的SSH Key提交;
  • 本地仓库能正确关联到对应的平台,能够正确拉取和提交代码

针对这三点,有以下办法解决:👇

  • 获取SSH Key时将生成的GitLabGitHub的Key文件id_rsa区分命名;
  • .ssh文件夹写入配置文件,根据本地仓库关联的远程仓库地址自动选择用哪个Key提交代码
  • 取消Git中全局的user.nameuser.email设置,为每个本地仓库单独设置局部的user.nameuser.email

# 二、操作实践

# 开始

ls ~/.ssh # 查看 .ssh 路径下保存的key
git config --list # 查看配置
1
2

通过查看保存的SSH Key,在.ssh目录下已存在一份Key(即是在前文GitLab配置及测试提交笔记中为GitLab配置的Key),接下来只要再下载一份GitHub的Key就行了。

下一步查看配置可以看到Git的全局配置中已经设置了全局的user.nameuser.email

gitlab-and-github-01

gitlab-and-github-02

# 获取GitHubSSH Key

接下来输入命令ssh-keygen -t rsa -C 'email@xxx.com'获取Key。

注意⚠️

  • 在保存Key的时候(下图红圈处)需要手动键入文件名,我在此输入id_rsa_github用以标识这是GitHub的Key;

  • 获取SSH Key需要配置全局的user.nameuser.email否则会失败

    👇下面是一次失败案例,重置后获取SSH Key成功,但是并没有保存成功

    git config --global --unset user.name
    git config --global --unset user.email
    
    1
    2

    gitlab-and-github-04

    gitlab-and-github-05

gitlab-and-github-03

# 创建配置文件

Key保存成功,接下来在.ssh文件夹下新建一个config文件,没有后缀,就是config

由于GitLab搭建在公司内网,使用内网IP作为识别Host。

User必须为准确的用户名IdentityFile指定对应的Key文件

# gitlab
Host 192.168.0.1
HostName 192.168.0.1
User xxxx
IdentityFile ~/.ssh/id_rsa

# github
Host github.com
HostName github.com
User xxxx
IdentityFile ~/.ssh/id_rsa_github
1
2
3
4
5
6
7
8
9
10
11

gitlab-and-github-06

接下来测试配置:

ssh -T git@github.com # Hi xxx! You've successfully authenticated....
ssh -T git@192.168.0.1 # Welcome to GitLab, @xxxx
1
2

gitlab-and-github-07

gitlab-and-github-08

# 为本地仓库配置user.nameuser.email

由于设置了两个SSH Key,为使本地仓库在提交代码更新时能正确使用对应平台的Key,每个本地仓库都需要设置user.nameuser.email

cd C:/GitLab/ExampleRepo
git config user.name "xxxx"
git config user.email "email@xxx.com"
1
2
3

提示

如果觉得为每个本地仓库设置user.nameuser.email太麻烦,可以选择将常用的平台如GitLabnameemail设置为全局的user.nameuser.email不常用的平台的本地仓库则每个单独设置其对应的user.nameuser.email

👉Git在提交时优先使用本地仓库配置的user.nameuser.email,如无设置再使用全局的user.nameuser.email

Last Updated: 2 years ago