一台电脑如何同时玩转GitHub和公司Git服务器?

最近有个小学妹刚入职新公司,公司用的是Git版本管理工具,然后她其实自己也经常玩GithubGit用起来基本操作也不大。但是现在她遇到一个小问题,相信这个问题很多程序员(媛)也经常遇到。什么问题呢?来跟大家唠一唠。

大家都知道,在多人协作开发中,我们需要把代码提交到Git服务器的。但是并不是所有人都可以往服务器上推送代码,只有有相应权限的人才能推送,所以就涉及到如何对服务器进行授权的问题。现在授权方式有两种,一种是HTTP/HTTPS协议,另外一种是SSH Key协议。

HTTP/HTTPS协议好处是方便,不需要繁杂的配置,push的时候直接输入用户名和密码就行。但是有个不好的是,每次进行PUSH操作,都需要进行授权,对于长期需要在这个仓库下工作来说,这显得就有点太麻烦了。

还有另外一种授权方式,就是SSH KeySSH Key是先在本地生成一个公钥和秘钥,然后再把公钥配置到Git服务器上,以后每次提交代码,Git会自动和本地的秘钥进行匹配,如果匹配到了,就代表授权成功,否则就是授权失败。SSH Key的方式好处是一次授权,次次可用。但第一次配置会稍微麻烦一点,不过对于长期在某个Git服务器上工作来说,这样一次麻烦,还是很值得的。

再回到刚刚那个小学妹的问题上,她是用SSH Key的方式在公司的Git服务器授权的,然后她的Github账号用的也是SSH Key方式授权,而同一个SSK Key是不能在两个平台上共用的(用户名和邮箱相同的除外),在理解为什么不能共用之前,先来看下如何生成SSH Key

一、生成一个SSH Key

  1. 打开git bash。然后输入命令:ssh-keygen -t rsa -C "你的邮箱"。一顿下一步就可以了,密码都保留为空。

  2. 然后在当前登录用户的home目录下找到.sshC:\Users\hynev\.ssh,打开id_rsa.pub

  3. github的设置中,点击SSH and GPG keys,在SSH Keys的地方,点击Add New,把id_ras.pub中的文本,复制到里面去。

注意到没有,你在生成SSK Key的时候,需要用到你的邮箱。一般我们在公司,都会有一个公司的内部邮箱,在Github上,我们用的都是自己私人的邮箱。不同邮箱生成的SSH Key是不同的,因此两个不同的Git服务器是不能公用相同的SSH Key的。那这时候怎么办呢?我们可以生成多个SSH Key,针对每个Git服务器都生成一个对应的SSH Key不就可以了吗?是的,来干起来!

二、生成多个SSH Key

多个SSH Key生成方式跟之前的有点不一样。这里我们以GithubGitee两个服务器为例,做个详细介绍。假如我在Github上的邮箱是[email protected],在Gitee上的邮箱是[email protected]

  1. 执行ssh-keygen -t rsa -C "[email protected]"。然后回车。
  2. 提示要输入SSH Key的路径和名称,我们填入id_rsa_github
$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): id_rsa_github
  1. 后面默认全部留空,按回车键一顿下一步就行了。这时候会在本地生成两个文件,分别是:id_rsa_githubid_rsa_github.pub

同样,gitee的创建方式也一样,只不过在输入秘钥名称的时候,把id_rsa_github改成id_rsa_gitee就行了。

此时在本地就有四个文件(两个公钥和两个秘钥)。我们把这四个文件拷贝到当前用户的home目录下的.ssh中(比如/home/ubuntu/.ssh或者C:\Users\hynev\.ssh)。

生成了多个SSH Key后,还需要写一个config配置文件用来映射不同的Git服务器与SSH Key文件。继续来往下走。

三、配置多个SSH Key文件:

上一个步骤已经生成了多个SSH Key,并且已经拷贝到.ssh文件夹中了。然后我们就可以开始配置了。步骤如下:

  1. .ssh文件夹中创建config文件。这个文件没有任何后缀。
  2. 打开config文件,然后输入以下代码:
Host github.com
HostName github.com
User [email protected]
PreferredAuthentications publickey
IdentityFile C:\Users\hynev\.ssh\id_rsa_github

Host gitee.com
HostName gitee.com
User [email protected]
PreferredAuthentications publickey
IdentityFile C:\Users\hynev\.ssh\id_rsa_gitee

这里对以上代码做个简单介绍。其中HostHostNamegit服务器的域名就可以。然后User分别填在这两个服务器上注册时候的邮箱。PreferredAuthentications publickey是固定写法,IdentityFile则分别填对应的公钥文件名称。
3. 以上配置好后,再把私钥文件添加到SSH-Agent中。执行命令如下:ssh-add id_rsa_github以及ssh-add id_rsa_gitee。如果执行的时候出现错误Could not open a connection to your authentication agent.,那么先执行eval $(ssh-agent),再执行ssh-add命令即可。

  1. 以上操作都完成后,就可以进行测试,看能否授权成功。比如测试github,那么命令为:ssh -T [email protected]。如果提示Hi XXX! You've successfully authenticated, but GitHub does not provide shell access.,则说明已经配置成功了。

以上便已经成功配置了多个SSH Key,在clonepush代码的时候,他会自动根据当前git仓库配置的url来选择不同的秘钥,就好像只有一个秘钥一样。

在我还没跟小学妹讲配置多个SSH Key之前,她每次在公司都只能通过Http/Https协议来授权,工作效率低,经常加班。自从我跟小学妹讲完如何配置多个SSH Key后,小学妹已经开始有时间陪我去吃饭看电影了,准备考虑下长期的发展。老铁们,我是不是靠实力吃饭的?

Git实际上是一个真的很好用的版本管理工具,学好可以给我们大大提高工作效率。但是很多人在刚用Git的时候往往会遇到很多问题,想必你也遇到过:

  1. 经常不知道做了什么,刚写的代码突然就不见了!
  2. 明明我已经把代码提交到服务器了,但是不知道为啥同事就是看不到!
  3. 把代码从服务器拉下来后,出现冲突了,不知道怎么解决?
  4. 领导让我搭建一台Git服务器,我不会!

遇到这些问题怎么化解?其实都是Git不会用导致的,今晚来我的直播间吧,我手把手教你如何正确使用Git,让你代码管理清晰有序,和同事协作再也不会被吐槽了。对了,课程是免费的,扫码就可以进来学习了:
一台电脑如何同时玩转GitHub和公司Git服务器?_第1张图片

点击

你可能感兴趣的:(编程)