0%
Git使用#001#同一台电脑同时使用多个Github账号

我在Github上有多个账号:

  • motadou账号,是主力账号,主要用于fork比较重要的仓库,用于自己存档,该仓库比较杂乱。
  • pagepaper账号,是博客账号,主要用于博文撰写以及gitbook总结性文章,是自己写作的主要基地。
  • mancodenet账号,是代码账号,主要用于存放自己的开源代码,以简练为主。

按照平时的使用习惯,每个账号我都会设置SSH keys进行免密登录。本文就是记录一种可以在同一台电脑上同时使用多个Github账号的方法。

清除全局账号信息

如果之前你设置过全局user.name和user.email,必须先清理掉该全局设置。
也就是说,不能使用全局的user.name和user.email,必须每个仓库设置自己本地的user.name和user.email。
清理方法如下:

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

生成SSH密钥

这里我们使用rsa秘钥进行演示,如果使用dsa或者ecdsa秘钥生成方法和使用方法相同。

按照Windows上的使用习惯,ssh所用的config文件位于“ C:\Users\{Windows用户名}\.ssh\config ”。为了方便管理秘钥,我们将生成的秘钥放置于相近目录下 “ C:\Users\{Windows用户名}\.ssh\git ”。这里,我的Windows用户名是Administrator。

第一步,首先创建 “C:\Users\Administrator\.ssh”和“C:\Users\Administrator\.ssh\git”目录。

1
$ mkdir .ssh\git

创建方法如下图所示:

第二步:使用如下命令开始生成私钥和公钥:

1
2
3
$ ssh-keygen -t rsa   -f C:/Users/Administrator/.ssh/git/id_rsa_1   -C"account:motadou"
$ ssh-keygen -t rsa -f C:/Users/Administrator/.ssh/git/id_rsa_2 -C"account:pagepaper"
$ ssh-keygen -t rsa -f C:/Users/Administrator/.ssh/git/id_rsa_3 -C"account:mancodenet"

如果要使用dsa或者ecdsa秘钥,参考命令如下:

1
2
$ ssh-keygen -t dsa   -f C:/Users/Administrator/.ssh/git/id_dsa_1   -C"account:motadou" ## dsa举例
$ ssh-keygen -t ecdsa -f C:/Users/Administrator/.ssh/git/id_ecdsa_1 -C"account:motadou" ## ecdsa举例

生成过程如下图所示:

第三步:按上述方法,生成我们所需要的所有公私钥文件。生成好之后,我们会在 C:\Users\Administrator.ssh\git 目录,看到如下文件。

第四步:在github.com网站配置登录秘钥,就是将id_rsa_{1,2,3}.pub的相关信息分别配置到moutadou,pagepaper,mancodenet账号下。
配置方法如下图所示:

创建ssh所需配置文件config

第一步,创建ssh配置文件:C:/Users/Administrator/.ssh/config,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Host motadou.github.com
HostName github.com
User motadou
IdentityFile C:\Users\Administrator\.ssh\git\id_rsa_1

Host pagepaper.github.com
HostName github.com
User pagepaper
IdentityFile C:\Users\Administrator\.ssh\git\id_rsa_2

Host mancodenet.github.com
HostName github.com
User mancodenet
IdentityFile C:\Users\Administrator\.ssh\git\id_rsa_3

Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa

第二步,配置文件创建成功之后,我们使用ssh命令进行联通性测试,使用命令如下:

1
2
3
$ ssh -T git@motadou.github.com
$ ssh -T git@pagepaper.github.com
$ ssh -T git@mancodenet.github.com

同一电脑可以使用不同github账号的核心原理说明:
命令 ssh -T git@motadou.github.com 表示:我们显式指定ssh使用别名 motadou.github.com 代表的配置信息进行登录。
根据上述配置文件,我们欲登录网站为 github.com,用户名为 motadou,使用的私钥文件为 C:\Users\Administrator.ssh\git\id_rsa_1。
所以指定不同的别名,我们将使用不同的登录信息来登录github。

如果登录成功,github返回成功信息如下:

1
Hi motadou! You've successfully authenticated, but GitHub does not provide shell access.

联通性测试结果如下:

修改TortoiseGit的配置项

修改配置项 TortoiseGit –> Settings –> Network –> SSH –> SSH client。

修改前配置项的值为:C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
修改后配置项的值为:C:\Program Files\Git\usr\bin\ssh.exe

修改方法如下图所示:

使用TortoiseGit的方法

经过上述的配置,我们已经完成了所有的前期准备工作,下面我们开始使用TortoiseGit操作三个账号下的仓库。

假如在三个账号下,都有个仓库名叫 TeamTalk,clone代码时,我们需要使用对应别名替换github.com域名:

账号 仓库原地址 别名替换后仓库地址
motadou git@github.com:motadou/TeamTalk.git git@motadou.github.com:motadou/TeamTalk.git
pagepaper git@github.com:pagepaper/TeamTalk.git git@pagepaper.github.com:pagepaper/TeamTalk.git
mancodenet git@github.com:mancodenet/TeamTalk.git git@mancodenet.github.com:mancodenet/TeamTalk.git

别名替换域名后,下载方法如下图所示:

所有仓库均按上述方法测试下载,确定可以正常执行clone操作。


clone成功了,但我们提交代码时,会提示我们User name和email没有设置,前文也说明过,一定不要设置全局的name和email,需要设置本地的name和email。

设置命令和方法如下图所示:

1
2
$ git config user.name  "motadou"
$ git config user.email "motadou@example.com"

设置当前项目的本地user.name和user.email之后,即可成功提交。

ssh-keygen放入环境变量

安装git之后,ssh-keygen会一并安装到git的目录下,比如:C:\Program Files\Git\usr\bin。
为了调用方便调用ssh-keygen命令,我们将该目录放置于系统变量中,我们在使用ssh-keygen来生成秘钥时,在命令行窗口可以直接调用该命令。
设置方法如下图所示:

参考资料