问题由来

为什么会有多个 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

  1. 任意目录下打开 Git Bash 工具

  2. 输入命令以下命令

     $ 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_rsagitee_id_rsa,如果你一个平台有多个账号,那最好也把用户名指定上去,如 gitee_username_id_rsa

  3. 输入命令后回车,然后按照默认,依次输入三次回车,既可生成 SSH KEY,如下所示:

  4. 安装上面相同的方式,生成其它平台的 SSH KEY,比如 gitee 和 gitlab

  5. 查看生成的文件

     $ 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

部署公钥

  1. 查看对应平台的公钥,.pub 后缀的文件为公钥,举例 github_xxx_id_rsa.pub

  2. 复制展示出来的公钥内容,从 ssh-rsa 开始(包括 ssh-rsa)直到末尾,包括末尾的“邮箱”或者在第二步骤中 -C 设置的其他名称。

  3. 浏览器打开 GitHub,添加公钥

    直达链接:https://github.com/settings/keys ,然后选择 New SSH key

    注,这里的 Title 也是为了提示你这个 SSH key 是用来做什么的,因此要能给你提示,建议以你的 PC 机名字命名

  4. 然后同样的方式,把其他平台的 .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.esegit-scm 工具的 ssh.exe,如下图所示:

TortoiseGit 原来的配置:

TortoiseGit 修改为 ssh.exe 后的配置:


好了,到此为止,同一客户端下可以愉快地使用多个 Git 账户了,再也不用担心账户密码冲突的问题了,也不用担心每次都要输入密码的问题。


工具      TortoiseGit 小乌龟 Git

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

 目录

微信公众号:物联网学前班