# Git仓库概述
我们来继续研究远程仓库,在前几篇博客中已经给大家介绍了git本地仓库的安装、初始化以及操作本地文件的各种命令,git、svn的目的都不仅仅是本地,svn是需要搭建一个svn服务器来保存、管理代码,git是不是也和svn一样呢,来需要有一个服务器呢?
答案是需要的,也许你也像我一样已经用了很多年的svn管理工具,有一个服务器也许是一个共识,在这一点他们两者还是有很多共同之处的,记得有一句话的意思是说“创新并不是完全抛弃了旧思想,而是在传统思想的基础之上,增加了一点点新的想法”,感觉这句话说的很对,很多东西都是对以前的产品、事务的继承和发展,并不是完全抛弃,
我们公司是搭建了一台git服务器作为版本库,其他开发人员只需要将版本库克隆到本地然后别人将自己写的代码push到服务器然后我们就可以从服务器上面pull下来最新代码,在每个人本机上面是拥有者完整的代码库的,这样保证了代码丢失的可能性很小,每个人在本机提交的时候都不会产生冲突,产生冲突也是pull别人代码时,可能和自己本地的冲突,在git里面也有着解决冲突的法宝。
git服务器的作用也有备份的作用,假设团队人少而且代码同时坏掉那么代码岂不是没有了;相反,假如服务器坏了,也可以拿本地上面的git作为新服务器,git是分布式的它的版本库分布在每一个克隆本机上面。
现在我们开发建远程仓库,为了节省资源和本着开源的原则我们在github上建立一个账号,[**github**](https://github.com)是保存众多开源项目的免费git服务器,为全球开源项目服务,当然如果你想有自己的私人空间并且容量大那么你需要花钱购买了,不过个人保存个自己的开源项目空间还是够用了。
# **创建github远程仓库**
我已经建立好个人账户,打开new respository选项,如下图
![](https://box.kancloud.cn/2016-05-04_57297ab156dda.jpg)
我建了一个仓库叫tgb,创建好之后界面如下:
![](https://box.kancloud.cn/2016-05-04_57297ab174107.jpg)
红色框中为自己的仓库地址,如果你本地安装着git客户端,就可以通过这个地址把代码克隆下来。
# **建立关联**
本地与远程建立关联我们采用ssh秘钥对方式,在本机生成公钥和私钥文件然后把公钥公开放在远程一端,私钥在本机根据公钥私钥认证机制即可连着远程仓库,这种方式比较安全而且不用每次都输入秘钥,在搭建hadoop集群时每台服务器之间也是进行ssh 公钥认证免密码登录来进行通信。
打开git bash 界面 :ssh-keygen -t -C "xxx@xxx.com" 即可,打开C盘用户目录下看有如下文件
![](https://box.kancloud.cn/2016-05-04_57297ab1915da.jpg)
将is_rsa.pub文件打开文件内容复制到github网站,有一个add sshkey界面如下图
![](https://box.kancloud.cn/2016-05-04_57297ab1b08c8.jpg)
title可以随便写,把公钥文件中内容复制到key文本框中,点击“add key”即可完成,上面那个已有的key是我本机的公钥。
接下来打开Git bash 切换到我们的本地仓库目录,在仓库中输入命令如下:
![](https://box.kancloud.cn/2016-05-04_57297ab1cb8df.jpg)
现在已经在本地和远程仓库关联起来了,可以把本地文件push到远程了,关联以后再推送就不需要remote,只用push命令就可以了,如下
![](https://box.kancloud.cn/2016-05-04_57297ab1dd20b.jpg)
由于是第一次连着需要确认是否正在,输入yes即可,再回过头来看看远程仓库是否有了内容:
![](https://box.kancloud.cn/2016-05-04_57297ab1efbec.jpg)
可以看到git服务器中已经有了本地推送过来的文件,
# **总结:**
到这里本地和远程仓库已经建立好了,现在我们用的已经是分布式控制代码了,不管你在哪里都可以进行管理和开发,无论你在家里还是在中国、美国不会因为地域的限制而影响开发,是不是感觉这点要比svn好很多。
假如你正在车上、在偏远山区没有网络同样也不会影响你提交代码,这一点是svn做不到的,它们各有自己的特色,也没有必要用着哪一个抨击哪一个的不好。