Github - 远程仓库


远程长裤?

  到目前为止,我们已经掌握了如何在Git仓库里对一个<mark>文件进行时光穿梭</mark>,你再也不用担心文件备份或者丢失的问题了。
  可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Git有什么特别的地方。
  没错,如果只是在一个仓库里管理文件历史,Git和SVN真没啥区别。


  为了保证你现在所学的Git物超所值,将来绝对不会后悔,同时为了打击已经不幸学了SVN的童鞋,<mark>本章开始介绍Git的杀手级功能之一</mark>(注意是之一,也就是后面还有之二,之三……):<mark>远程仓库</mark>。


  <mark>Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上</mark>。<mark>怎么分布</mark>呢?最早,肯定只有一台机器有一个原始版本库,此后,<mark>别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分</mark>。

  你肯定会想,至少需要两台机器才能玩远程库不是?但是我<mark>只有一台电脑</mark>,怎么玩?

  <mark>其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下</mark>。不过,现实生活中是不会有人这么傻的在一台电脑上搞几个远程库玩,因为一台电脑上搞几个远程库完全没有意义,而且硬盘挂了会导致所有库都挂掉,所以我也不告诉你在一台电脑上怎么克隆多个仓库。

  实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。


  <mark>完全可以自己搭建一台运行Git的服务器,不过现阶段,为了学Git先搭个服务器绝对是小题大作</mark>。好在这个世界上有个叫GitHub的神奇的网站,从名字就可以看出,<mark>这个网站就是提供Git仓库托管服务的</mark>,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。
  


配置

  • 在继续阅读后续内容前,<mark>请自行注册GitHub账号</mark>。
  • 由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key。

在用户主目录下,看看有没有.ssh目录
cd ~/.ssh 看看成不成功)

  • 如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。
  • 如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"

<mark>你需要把邮件地址换成你自己的邮件地址</mark>,
然后<mark>一路回车</mark>,使用默认值即可,
(由于这个Key也不是用于军事目的,所以也无需设置密码。)

代码参数含义:

  • -t 指定密钥类型,默认是 rsa ,可以省略。
  • -C 设置注释文字,比如邮箱。
  • -f 指定密钥文件存储文件名。

以上代码省略了 -f 参数
因此,运行上面那条命令后会让你输入一个文件名
用于保存刚才生成的 SSH key 代码,如:
Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]


当然,你也可以不输入文件名,使用默认文件名(推荐),
那么就会生成 id_rsaid_rsa.pub两个秘钥文件。

keygen - 注册机
”/“是根目录,”~“是家目录。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件

这两个就是SSH Key的秘钥对,

  • id_rsa是私钥,不能泄露出去,
  • id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

点“Add Key”,你就应该看到已经添加的Key:


第3步:连接成功?

在git Bash 中输入以下代码

$ ssh -T git@github.com

当你输入以上代码时,会有一段警告代码,如:

The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?

这是正常的,你输入 yes 回车既可。如果你创建 SSH key 的时候设置了密码,接下来就会提示你输入密码,如:

Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':

当然如果你密码输错了,会再要求你输入,知道对了为止。

注意:输入密码时如果输错一个字就会不正确,使用删除键是无法更正的。

密码正确后你会看到下面这段话,如:

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

如果用户名是正确的,你已经成功设置SSH密钥。如果你看到 “access denied” ,者表示拒绝访问,那么你就需要使用 https 去访问,而不是 SSH 。


为什么GitHub需要SSH Key呢?

<mark>因为GitHub需要识别出你推送的提交确实是你推送的</mark>,而不是别人冒充的

而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。


最后友情提示,在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。
所以,不要把敏感信息放进去。


如果你不想让别人看到Git库,有两个办法,

  • 一个是交点保护费,让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。
  • <mark>另一个办法是自己动手,搭一个Git服务器</mark>,因为是你自己的Git服务器,所以别人也是看不见的。
    (<mark>这个方法我们后面会讲到的,相当简单,公司内部开发必备</mark>。)

确保你拥有一个GitHub账号后,我们就即将开始远程仓库的学习。