前面的话
本文将主要介绍如何使用Github来托管Git服务
SSH
大多数Git服务器都会选择使用SSH公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权
首先先确认一下是否已经有一个公钥了。SSH公钥默认储存在账户的主目录下的~/.ssh目录
有.pub后缀的文件就是公钥,另一个文件则是密钥
![](https://i-blog.csdnimg.cn/blog_migrate/54df0921713f39781cb9855f72bab9fc.png)
假如没有这些文件,或者干脆连.ssh目录都没有,可以用ssh-keygen来创建
现在,删除.ssh目录,对SSH重新生成
![](https://i-blog.csdnimg.cn/blog_migrate/bd0eb5a56f1c3a05041d94134138f531.png)
下面使用ssh-keygen命令来创建SSH,这里需要把邮件地址换成自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码
![](https://i-blog.csdnimg.cn/blog_migrate/a570338b5d8da04516bc73528ff17809.png)
如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人
![](https://i-blog.csdnimg.cn/blog_migrate/aae69254d4c1a4caf24f75fa28ca232d.png)
SSH的公钥如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/7d0b49ab3a46c6402108e8046d7c6fa5.png)
接下来,登陆GitHub,打开“Settings”,“SSH Keys”页面
![](https://i-blog.csdnimg.cn/blog_migrate/390a3657fd98a432e821e4c9be53b556.png)
然后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容
![](https://i-blog.csdnimg.cn/blog_migrate/73a4208cae8a14d6269320a78bf64452.png)
点击"Add SSH key"按钮后,结果如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/d7f0608c4b2e579076b225acf560945b.png)
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送
当然,GitHub允许你添加多个Key。假定你有若干电脑,一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了
在GitHub上托管的Git仓库,任何人都可以看到,但是只有你自己才能修改。所以,不要把敏感信息放进去
添加本地库
下面添加一个名称为'mygit'的本地库,工作目录下有一个名称为'a.txt'的文件,其内容是'111',并被提交
![](https://i-blog.csdnimg.cn/blog_migrate/94c1e455bb4383e086d6e907725350b0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/25b6e85fe8ffdf3159a530d40f109edc.png)
添加远程库
现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作
下面要建立一个名称为'learngit'的仓库,由于事先已经添加过了。所以,先把其删除
进入'learngit'的仓库界面,找到'Settings'按钮
![](https://i-blog.csdnimg.cn/blog_migrate/1b136fade9c626a49944e79c3b0c3558.png)
在页面最下方,找到'Delete this repository'按钮
![](https://i-blog.csdnimg.cn/blog_migrate/d22f53726f8b9c696b8e6f5ac81d2e11.png)
点击该按钮后,输入要删除的仓库名称,点击'I understand the consequences, delete this reposiytory'按钮即可删除
![](https://i-blog.csdnimg.cn/blog_migrate/948a4cd373a458b599bdab73adf92d8d.png)
接下来,重新添加名称为'learngit'的仓库。点击右上角'+'号弹出的'New repository'
![](https://i-blog.csdnimg.cn/blog_migrate/604b591e1f6cfff03a9108807c5e9d69.png)
输入仓库名称Repository name为'learngit',仓库介绍Description为'learn git',点击'Create repository'按钮,即可添加成功
![](https://i-blog.csdnimg.cn/blog_migrate/51a6e10ee6927f0ec159850fa797b3d7.png)
添加成功后,弹出如下界面。目前,在GitHub上的这个'learngit'仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库
![](https://i-blog.csdnimg.cn/blog_migrate/018e13e263bb8138f0bb589f1311e543.png)
接下来,需要对远程库'learngit'和本地库'mygit'进行关联
$ git remote add origin git@github.com:【GitHub帐号名】/【远程库的名称】.git
添加后,远程库的名字就是origin
,这是Git默认的叫法,也可以改成别的,但是origin
这个名字一看就知道是远程库
如果已经进行了关联,或者关联错了,则需要先删除关联
$ git remote rm origin
删除后,重新添加关联
![](https://i-blog.csdnimg.cn/blog_migrate/4279551f56c276ccc9d7b77bd336427f.png)
接下来,把本地库'mygit'里的所有内容推送到远程库'learngit'中
把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master
推送到远程
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送到远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令
![](https://i-blog.csdnimg.cn/blog_migrate/8c80aca1b79778c036737f35abe37634.png)
推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样
![](https://i-blog.csdnimg.cn/blog_migrate/4da1ddc859eaba5056c4714029a28d22.png)
从现在起,只要本地作了提交,就可以通过以下命令,把本地master
分支的最新修改推送至GitHub
$ git push origin master
克隆远程库
前面我们介绍先有本地库,后有远程库的情况。现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆
首先,登陆GitHub,创建一个新的仓库,名字叫gitskills
![](https://i-blog.csdnimg.cn/blog_migrate/8b58e4b3c93610bce6328e4c563b7e6e.png)
勾选Initialize this repository with a README
,这样GitHub会自动为我们创建一个README.md
文件。创建完毕后,可以看到README.md
文件
![](https://i-blog.csdnimg.cn/blog_migrate/58dcd11f16d08ae82dd0ad2c1ff44b24.png)
现在,远程库已经准备好了,下一步是用命令git clone
克隆一个本地库
$ git clone git@github.com:【GitHub用户名】/【Github远程库名称】.git
在本地电脑的D盘新建一个名称为'b'的目录,然后将远程库克隆到本地
![](https://i-blog.csdnimg.cn/blog_migrate/13d502d01766e9bc9f6b7043104681a9.png)
此时,本地已经有gitskills目录,在该目录下已经有README.md文件了
![](https://i-blog.csdnimg.cn/blog_migrate/deba0a8a34e2452d4139c8d05996ca7e.png)
如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了