我在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 | $ ssh-keygen -t rsa -f C:/Users/Administrator/.ssh/git/id_rsa_1 -C"account:motadou" |
如果要使用dsa或者ecdsa秘钥,参考命令如下:
1 | $ ssh-keygen -t dsa -f C:/Users/Administrator/.ssh/git/id_dsa_1 -C"account:motadou" ## dsa举例 |
生成过程如下图所示:
第三步:按上述方法,生成我们所需要的所有公私钥文件。生成好之后,我们会在 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 | Host motadou.github.com |
第二步,配置文件创建成功之后,我们使用ssh命令进行联通性测试,使用命令如下:
1 | $ ssh -T git@motadou.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 | $ git config user.name "motadou" |
设置当前项目的本地user.name和user.email之后,即可成功提交。
ssh-keygen放入环境变量
安装git之后,ssh-keygen会一并安装到git的目录下,比如:C:\Program Files\Git\usr\bin。
为了调用方便调用ssh-keygen命令,我们将该目录放置于系统变量中,我们在使用ssh-keygen来生成秘钥时,在命令行窗口可以直接调用该命令。
设置方法如下图所示:
参考资料
- ssh-keygen 中文手册
http://www.jinbuguo.com/openssh/ssh-keygen.html