(四)远程仓库及其与本地仓库交互
最后更新于:2022-04-01 20:06:41
**创建GitHub账号及获取SSH秘钥对**
创建远程仓库通常有两种方式:
1、把一台电脑充当服务器,让它每天开机,其他人都从这台“服务器”仓库clone一份到自己的电脑上,并把各自的修改(包括添加了新的feature、解决了新的bug等)提交到“服务器”仓库中,当然你也可以从“服务器”仓库中拉取别人的提交。实际开发中一般就是这么做的。
2、因为咱毕竟还是处于学习当中,为了学Git去整个"服务器"未免有点“杀鸡焉用牛刀”的感觉。好在有个为Git仓库提供托管服务网站的名为GitHub的网站,可以由它来创建并管理远程仓库。
因此,咱选择第二种方式来创建远程仓库,先进官网去瞧瞧,[GitHub官网](https://github.com/):

账号请大家自行注册。由于你的本地Git仓库和远程GitHub仓库之间的传输是通过[SSH](http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html)协议加密的,因此需要进行一些设置。
步骤如下:
1)、创建SSH Key。在创建SHH Key之前看看在用户主目录有没有.ssh文件夹,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可以直接跳过这一步。如果没有,打开咱第一章叫大家安装的Git Bash,创建的命令如下:

注意:把email地址换成你自己的,然后一直按回车键即可(只为学习,也无需设密码)。
然后,你将看到主目录里面多了一个.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,id_rsa.pub是公钥。
2)、用你刚创建的GitHub账号登录GitHub网站,打开“Account settings”(你可能看到上面有个感叹号,那是因为像我们平常注册账号一样,需要激活,我们可以点进去填入**Name,**Email (will be public)**然后进入邮箱确认激活即可),然后点击左侧的“SSH Keys”页面,

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

点击Add key:

为什么GitHub需要SSH Key呢?因为GitHub需要确认推送的提交是你做的,而不是别人冒充的,而Git支持SSH协议,所以GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。然后你也可以添加多个SSH key,只需把别的电脑上的Key添加即可,这里不再赘述。注意:在GitHub上免费托管的Git仓库(既然是免费,那然后大家都可以看到),只有自己才能修改,所以建议大家不要把重要的资料托管上去。如果你不想让别人看到你的Git仓库,有两种办法,一是交点钱给GitHub,让它把你管理(其他人是看不到的,也就是说你的Git仓库变为了私有);还有一种方法,那就自己搭个Git服务器吧,通常公司做开发也就是这么干的。
**创建并添加远程仓库**
有了GitBub账号,登录后找到右上角的“Create new...”:

点击New repository(即创建一个新的仓库):

然后在Repository name中输入mygit,点击Create repository即可:

好了,这样就创建了一个仓库。现在这个远程的mygit仓库还是空的,下面我们把上面章节中创建的本地mygit仓库推送到这个远程仓库中。咱们的思路是把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
**将本地仓库推送至远程仓库**

其实GitHub已经帮我们写好要在Git Bash中输入的命令了,我们只需按它写的来执行即可:

这里添加名为origin1的远程库,当然你也可以把名字换成别的。注意:这里的xiaokefeixia换成你的GitHub账户名。
下面就可以把本地库的所有内容推送到远程库上:

用git push命令把本地库的内容推送到远程,实际上是把当前分支(关于分支,后面会讲到)master推送到远程。
以后只要本地做了提交。就可以使用git push origin1 master #把本地master分支的最新修改推送至GitHub。
**从远程仓库clone至本地**
和之前一样,先登录GitHub创建一个新的远程库,叫做clonegit,记得勾选一下:

这样就可以帮我们创建一个README.md文件,如图:

好了,远程库准备好了,下面咱再用git clone 命令来clone一个到本地:

然后把们将看到,用户主目录下多了一个clonegit目录,而且里面还有README.md和.git:

这样我们就成功的从远程仓库clone了一个到本地了。是不是so easy呢~
**小结**:
将本地仓库推送至远程仓库(以下的用户名及仓库名要换成自己的哦):
1、关联一个远程仓库,使用git remote add origin git@github.com:xiaokefeixia/mygit.git ;
2、关联之后,可使用git push -u origin master第一次推送master分支的所有内容;
3、以后每次本地提交后,就只需敲入命令git push origin master推送最新修改到远程即可。
从远程仓库clone(要克隆得知道远程仓库的地址)至本地:
1、创建一个远程库clonegit;
2、然后使用命令:git clone git@github.com:xiaokefeixia/clonegit.git即可。
';