目录

Git 中一个客户端设置多个账号

最近遇到这样的需求,需要在一台电脑上同时使用两个 github 账号,负责不同的用途,比如:一个用来写个人项目,一个用来写公司的项目。

配置

注册两个 git 账号

选择一个平台注册两个账号即可。

取消全局设置的用户名和邮箱

1
2
3
// 取消全局用户名和邮箱
$ git config --global --unset user.name
$ git config --global --unset user.email

SSH 配置

生成私钥和公钥

如果用户家目录下没有 .ssh 目录,请自行创建 由于我注册多家平台的 git 账号,所以对其进行了一个文件目录分类

1
2
3
4
5
6
7
$ mkdir -pv ~/.ssh/github # gitee|coding|bitbucket|gitlab
$ ssh-keygen -t rsa -C "myfirst@gmail.com" # 在回车提示中输入完整路径,如:/path/to/user/.ssh/github/id_myfirst_rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/path/to/user/.ssh/id_rsa):/path/to/user/.ssh/github/id_myfirst_rsa
$ ssh-keygen -t rsa -C "mysecond@gmail.com" # 在回车提示中输入完整路径,如:/path/to/user/.ssh/github/id_mysecond_rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/path/to/user/.ssh/id_rsa):/path/to/user/.ssh/github/id_mysecond_rsa

分别配置两个账号的 SSH and GPG keys

Settings 控制面板中找到 SSH and GPG keys,点击 New SSH Key 进行添加,Title 请自行决定。

https://inotes.oss-cn-beijing.aliyuncs.com/git/201901/github-new-ssh-key.jpg

将密钥添加到 ssh-agent 的会话中

如果执行 ssh-add 时显示错误 Could not open a connection to your authentication agent. 那么执行 eval ssh-agent -s

1
2
3
4
$ ssh-add -K ~/.ssh/github/id_myfirst_rsa
Identity added: /path/to/.ssh/github/id_myfirst_rsa (/path/to/.ssh/github/id_myfirst_rsa)
$ ssh-add -K ~/.ssh/github/id_mysecond_rsa
Identity added: /path/to/.ssh/github/id_mysecond_rsa (/path/to/.ssh/github/id_mysecond_rsa)

查看 ssh key 的设置

1
2
3
$ ssh-add -l
2048 SHA256:ai3jRoAfkqgB2LYtJuQR8QZN1F5XXXXXXXXXXXXXXXX /path/to/.ssh/github/id_myfirst_rsa (RSA)
2048 SHA256:AL2jRoAfkqgB2LYtJuQR8QZN1F5XXXXXXXXXXXXXXXX /path/to/.ssh/github/id_mysecond_rsa (RSA)

修改 ssh config 文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ vim ~/.ssh/config
Host *
    KexAlgorithms +diffie-hellman-group1-sha1
# default: myfirst
Host github.com
    HostName github.com
    User myfirst
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github/id_myfirst_rsa
# mysecond
Host mysecond.github.com
    HostName github.com
    User mysecond
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github/id_mysecond_rsa

测试连通性

mysecond.github.com 需要配置 GitHubHost

1
2
3
4
5
6
7
// 测试默认用户 myfirst 的连接性
$ ssh -T git@github.com
Hi myfirst! You\'ve successfully authenticated, but GitHub does not provide shell access.

// 测试另一个用户 mysecond 的连接性
$ ssh -T git@mysecond.github.com
Hi mysecond! You\'ve successfully authenticated, but GitHub does not provide shell access.

项目测试

创建两个项目目录

1
$ cd ~/ && mkdir -pv {a,b}

初始化项目 a

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ cd ~/a
$ git init
$ echo "myfirst" > README.md
$ git add README.md
$ git config user.name "myfirst"
$ git config user.email "myfirst@gmail.com"
$ git remote add github git@github.com:myfirst/test.git
$ git push -u github master
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes | 213.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:myfirst/test.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from github.

初始化项目 b

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ cd ~/b
$ git init
$ echo "mysecond" > README.md
$ git add README.md
$ git config user.name "mysecond"
$ git config user.email "mysecond@gmail.com"
$ git remote add github git@mysecond.github.com:mysecond/test.git
$ git push -u github master
Counting objects: 3, done.
Writing objects: 100% (3/3), 218 bytes | 218.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To mysecond.github.com:mysecond/test.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from github.