背景
一台设备上经常要链接两个 Git 远程仓库,比如一个github,一个gitee,又或者一个是公司的远程仓库,一个是自己日常维护的远程仓库。这样子两个仓库分别需要两个账户,在一台设备上分别进行git操作。
我个人是属于后者。目前自己手上使用的是公司配发的电脑,但是日常又想更新维护自己的Github仓库,于是我需要在一台电脑上,能够在上班时使用公司的仓库账号(邮箱、用户名),推送代码;另外,又可以使用另一个账号正常地互不影响的操作自己的Github仓库。于是整理记录了这篇实践指南。
首先,假设这是我的个人信息:
公司git远程仓库的用户名、邮箱
- user.name: xiaomingchen
- user.email: xiaomingchen@company.com
个人Github的用户名、邮箱 - user.name: xiaoming
- user.email: xiaoming@qq.com
实操指南
- 创建两个目录
- 一个用于工作、一个用于个人的项目存放
mkdir ~/work
mkdir ~/personal
- 编辑全局的 git 配置文件
[includeIf "gitdir:~/work/"]
path=.work.gitconfig
[includeIf "gitdir:~/personal/"]
path=.personal.gitconfig
- 再编辑两个配置文件,对应全局配置文件中的两个path
- ~/.work.gitconfig:
[user]
name=xiaomingchen
email=xiaomingchen@company.com
- ~/.personal.gitconfig:
[user]
name=xiaoming
email=xiaoming@qq.com
以下步骤假设两个远程使用不同的公钥私钥进行登录,首先需要生成两对公钥私钥,并将公钥在对应远程进行保存。再进行配置,告诉本地git,哪个仓库分别使用哪个私钥。具体步骤如下:
5. 生成两对公钥私钥
$ ssh-keygen -t rsa -C 'xiaomingchen@company.com' -f ~/.ssh/work_id_rsa
$ ssh-keygen -t rsa -C 'xiaoming@qq.com' -f ~/.ssh/personal_id_rsa
生成之后,在~/.ssh可以看到如下公钥私钥
$ cd ~/.ssh
$ ls -l
-rw------- 1 xiaoming staff 2602 2 14 01:00 personal_id_rsa
-rw-r--r-- 1 xiaoming staff 568 2 14 01:00 personal_id_rsa.pub
-rw------- 1 xiaoming staff 2610 7 6 2022 work_id_rsa
-rw-r--r-- 1 xiaoming staff 577 7 6 2022 work_id_rsa.pub
- 进行配置,说白了就是告诉git,哪个远程仓库使用哪个私钥进行身份验证
$ cd ~/.ssh
$ vim config
编辑如下内容
# work
Host git.company.com
HostName git.company.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/work_id_rsa
# personal
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/personal_id_rsa