问题由来
为什么会有多个 Git 账户
当下环境做软件开发或多或少都离不开资源丰富的 GitHub,它并誉为程序员的天堂,几乎每一个软件开发人员都会有一个自己的 GitHub 账户。
另一方面,软件公司也在不断进化代码的管理方式,大多数软件公司开始独立部署私有的 Gitlab 来托管公司代码,进而进行工程管理和代码审查,以及后续的自动化部署、自动化测试、持续集成。所以,你至少还会有一个公司的 Git 账户。
再者,由于 GitHub 属于外网,经常被 Q 而无法高效率地使用,所以我们还经常会用到国内越来越好的 Git 托管平台 码云 Gitee,而且很多国内优秀的开源软件会将同步托管到 GitHub 和 Gitee,国内的开发者可以使用 Gitee 优雅地拉取和推送代码,而不用担心龟速下载的问题。另外,Gitee 还有一个非常重要的中间人的角色,当 GitHub 资源下载不动时,你可以将其导入到 Gitee,从 Gitee 上下载代码,然后再通过设置 remote 的方式回溯到 GitHub。因此,怎么样你都还得有一个 Gitee 账户。
So,现在我们已经有了三个 Git 账户了(GitHub、公司 Gitlab、Gitee),需要在一台 PC 终端上使用。
多个账户会带来什么问题
既然你已经翻到了这篇文章,想必你已经遇到了问题。
没遇到问题的朋友,不妨使用常用的 HTTPS 方式在同一个 PC 终端操作不同账户试试,看看会遇到哪些问题(基本上都是修改了 name 和 email 还是无法推送代码,提示禁止访问,苦笑)。
如果遇到账户名密码不对的情况,也可以尝试去 Windows 的凭据中心删除对应的账户凭据,重新配置,位置 “控制面板 –> 凭据管理器 –> Windows 凭据”。
解决方案
使用 SSH。
SSH 是另外一种加密传输方式,采用公钥+私钥的方式来验证用户的合法性,Git 托管平台基本都支持 SSH 方式访问,我们需要做的就是为各个平台配置对应的公钥。
生成公钥
前提:你的 PC 机已经安装了 git-scm 工具,没有安装的点击链接安装,我们需要使用其
Git Bash
。
任意目录下打开
Git Bash
工具输入命令以下命令
$ ssh-keygen -t rsa -C 'youremail@xxx.com' -f ~/.ssh/xxx_id_rsa
其中
-C
后面指定的邮箱是 SSHKEY 的名称,为了便于辨识建议使用个人邮箱标识;-f
后面的~/.ssh/xxx_id_rsa
是指定生成的 SSH KEY 文件的路径名称,建议命名 xxx_id_rsa 的时候加上代码托管平台的标识,便于后续区分,比如github_id_rsa
和gitee_id_rsa
,如果你一个平台有多个账号,那最好也把用户名指定上去,如gitee_username_id_rsa
。输入命令后回车,然后按照默认,依次输入三次回车,既可生成 SSH KEY,如下所示:
安装上面相同的方式,生成其它平台的 SSH KEY,比如 gitee 和 gitlab
查看生成的文件
$ ls ~/.ssh gitee_xxx_id_rsa github_xxx_id_rsa gitlab_work_id_rsa gitee_xxx_id_rsa.pub github_xxx_id_rsa.pub gitlab_work_id_rsa.pub
部署公钥
查看对应平台的公钥,
.pub
后缀的文件为公钥,举例 github_xxx_id_rsa.pub复制展示出来的公钥内容,从 ssh-rsa 开始(包括 ssh-rsa)直到末尾,包括末尾的“邮箱”或者在第二步骤中 -C 设置的其他名称。
浏览器打开 GitHub,添加公钥
直达链接:https://github.com/settings/keys ,然后选择
New SSH key
。注,这里的 Title 也是为了提示你这个 SSH key 是用来做什么的,因此要能给你提示,建议以你的 PC 机名字命名。
然后同样的方式,把其他平台的
.pub
公钥部署到对应的托管平台。
在 ~/.ssh 目录增加配置 config 文件
在 ~/.ssh
,内容如下:
# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_xxx_id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_xxx_id_rsa
其中 Host 和 HostName 填写 git 服务器的域名,IdentityFile 指定私钥的路径。如果你还有其他的代码服务器,可以继续追加配置。
Git bash 工具支持 vim 命令编辑文件,vim ~/.ssh/config
填写配置,然后保存。
测试
使用 ssh -T host
命令进行分别测试
$ ssh -T git@github.com
测试成功后,再测试其他平台:
$ ssh -T git@gitee.com
测试通过后,您就可以愉快地使用 SSH 的方式进行 clone 和 push 了,如下所示:
git clone git@gitee.com:xxx/xxx.git
小乌龟 Git 工具适配
除了 git-scm 命令行工具外,我们还常用 TortoiseGit 可视化工具来配合工作,该工具乌龟 logo,故该工具俗称 “小乌龟”。
由于 TortoiseGit 使用的 SSH 秘钥与 ssh-keygen 不同,所以使用 TortoiseGit 的时候依旧会提示 NotSupport
。所以我们需要对 TortoiseGit 的 SSH 工具进行修改。错误提示通常如下:
打开 TortoiseGit 配置,选择 Network –> SSH,调整原来的 TortoiseGitPlink.ese
为 git-scm
工具的 ssh.exe
,如下图所示:
TortoiseGit 原来的配置:
TortoiseGit 修改为 ssh.exe 后的配置:
好了,到此为止,同一客户端下可以愉快地使用多个 Git 账户了,再也不用担心账户密码冲突的问题了,也不用担心每次都要输入密码的问题。
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!