•写在前面
早在很早之前就说了,git是分布式版本控制系统,它的优势之一就是非常方便团队进行多人协作开发,之前讲的内容都没有体现出多人协作的特点,这一篇文章就是为了讲解git在多人协作中的重要功能,就是远程仓库。远程仓库顾名思义就是将一个git仓库放在某个云端机器中,然后使用其余机器对这个远程仓库进行克隆,每个人在自己的机器上进行开发,将自己的修改操作提交到远程仓库中,同时也在需要的时候将远程仓库其他人的开发成果更新到自己的本地仓库,从而达到多人协作的目的。
远程仓库其实在接触git的时候,都会接触到的,比如所熟知的github、gitlab等等远程仓库提供。没有的人可以去这些网站上注册一个远程仓库,有的咱们接着进行下一步。
由于本地git仓库和github仓库之间的传输是通过ssh加密的,所以在使用之前需要进行设置匹配。
首先是创建ssh key,原先设置过的,会在机器主目录中有一个.ssh目录(例如我的在c:\users\ll\.ssh),该目录下有id_rsa和id_rsa.pub两个文件,没设置过的就需要我们现在使用如下指令进行创建ssh。
$ ssh-keygen -t rsa -c "注册远程仓库(github或其他)的邮箱地址"
执行下去,按照提示进行即可(可以直接一路回车就行了,也不用设置什么),执行完操作之后,在.ssh目录下就会出现上述的两个文件,这两个就是ssh key的秘钥对,id_rsa是私钥,注意保管哦,id_rsa.pub是公钥。生成秘钥对之后,你就可以登录远程仓库(比如登录github),找到ssh keys页面,具体操作如下图,将id_rsa.pub中的秘钥面贴到页面中。
这里我们想想,为什么github需要ssh key呢?因为github需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而git支持ssh协议,所以,github只要知道了你的公钥,就可以确认只有你自己才能推送。当然,github允许你添加多个key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的key都添加到github,就可以在每台电脑上往github推送了。如果你不想让别人看到git库,可以让github把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。
在之前的介绍中,我们已经在本地创建了一个仓库,这个时候我们想要创建一个远程仓库,以此来同步本地仓库和远程仓库,应该怎么做呢?很简单,首先在远程仓库(github)中创建一个新的仓库,具体操作图如下:
创建了新的仓库之后,你可以使用如下指令进行关联,具体流程图也贴在下面,但是要注意不要贴错地址哦,我在图上打了文字描述。
$ git remote add orgin [email protected]:dengbocong/gittest.git
#注意orgin后面的那个地址,用你github创建的那个仓库的ssh地址哦,别直接
#把我这个黏贴过去了,直接用我这个虽然可以关联,但是后面提交的时候,由于
#没有我的ssh秘钥,你是不能提交的
现在已经完成本地仓库和远程仓库的关联,注意,origin是远程仓库的代称,也可以改成别的名称,不过默认统一化的用origin,一眼就能看出是远程仓库,仔细点你就会发现,我们创建的本地仓库有个代称,叫master,后面你就会知道,可以将远程仓库理解成origin分支,将本地仓库理解成master分支,我们还可以创建很多分支。接下来把本地仓库的内容更新远程仓库中,使用如下指令。
$ git push -u origin master
#由于远程库是空的,我们第一次推送master分支时,加上
#了-u参数,git不但会把本地的master分支内容推送的远
#程新的master分支,还会把本地的master分支和远程的master分
#支关联起来,在以后的推送或者拉取时就可以简化命令。
$ git push origin master
#以后同步的时候只要使用这个就可以了
#还有值得注意的是,在第一次进行ssh链接是,第一次使用clone或者push
#指令是,会有一个警告:
#the authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
#rsa key fingerprint is xx.xx.xx.xx.xx.
#are you sure you want to continue connecting (yes/no)?
这是因为git使用ssh连接,而ssh连接在第一次验证github服务器的key时,
需要你确认github的key的指纹信息是否真的来自github的服务器,输入yes回车即可。
git会输出一个警告,告诉你已经把github的key添加到本机的一个信任列表里了:
warning: permanently added 'github.com' (rsa) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。
在前面我们已经建立了一个远程仓库,现在我们把本地的仓库删掉,直接删除(不用担心,我们接下来会从远程仓库克隆一个下来,毕竟我们已经相当于做了备份),比如在桌面直接在右击菜单中执行git bash,直接使用指令。
$ git clone [email protected]:dengbocong/gittest.git
#当然后面的那个地址用https的也可以哦
如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。下一步我们介绍分支管理。