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_rsa
和id_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_rsa
和id_rsa.pub
两个秘钥文件。
- 《 SSH-keygen用法 》https://www.cnblogs.com/yanglang/p/9563496.html
keygen - 注册机
”/“是根目录,”~“是家目录。
如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_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账号后,我们就即将开始远程仓库的学习。