1、什么是GIT?
首先对很多只闻其名的初学者来说,第一个疑惑就是:什么是GIT?
GIT可以说是目前世界上用的最多的、最先进的、最火的分布式版本控制系统了,而且还是开源的。
GIT是由Linus花了两周时间自己用C写了一个分布式版本控制系统,当初只是用来管理Linux系统的源码的。后来随着开发的深入,Git 的正常使用都由一些友好的脚本命令来执行,使 Git 变得非常好用,再加上GitHub网站上线了,为开源项目免费提供Git存储,使得Git迅速成为最流行的分布式版本控制系统。
那么什么是分布式版本控制系统呢?别着急,往后看。
2、分布式VS集中式
什么是分布式版本控制系统呢?我们把分布式与集中式对比着讲,更容易理解。
集中式,顾名思义就是有一个服务器集中的存放版本库。在开发的时候呢用的是各自的电脑,首先要(从服务器,也就是版本库)获取最新的版本;然后在进行开发;开发完成之后,再提交代码。
集中式版本控制系统必须联网才能工作,这也是它最大的缺点,局域网内的网速快的话还可以接受,可如果网速慢的话,这个体验就会很难受了。集中式版本控制系统还有一大缺点就是:如果中央服务器坏了,开发者将无法再提交修改,开发者之间也无法再协作。
常用的集中式版本控制系统有CVS和SVN。
那么,分布式版本控制系统有什么什么样的呢?
首先,分布式版本控制系统没有“中央服务器”的概念。每一个开发者的电脑上都是一个完整的版本库,因此开发者可以提交到本地,也因此开发者的电脑联网与否都不影响工作了。
每个开发者电脑上都有一个完整的版本库,那么多个开发者之间是怎么协作呢?比方说开发者A在自己电脑上改了常量类文件Const.java,他的同事也在自己的电脑上改了Const.java文件,这时,他们俩只需把各自的修改推送给对方,就可以互相看到对方的修改了。但是,在实际的开发中,各个协作者之间一般是不会相互之间直接推送、拉取文件的,因为种种原因吧,可能你的同事出差或者请假了,这时候两协作者之间直接推送、拉取是不可行的,因此,通常有一台电脑充当“中央服务器”,这个服务器仅仅是用来方便“交换”协作者之间的修改。
常用的分布式版本控制系统就是本文提到的GIT。
下面看一个表格,分布式与集中式版本控制系统的比较:
分布式(GIT) | 集中式(SVN) | |
---|---|---|
中央服务器 | 一般有充当“中央服务器”的电脑,开发人员本地都有版本库。 | 有。开发人员必须依赖中央服务器才能协作。 |
网络依赖 | 分布式在没有网络的情况下除了push操作不能之外其余的操作基本都可以,在有网络的情况下才能执行 push操作。 | 必须要联网才能工作。 |
安全方面 | 相对高 | 相对低 |
体验方面 | 速度快、灵活、离线工作、冲突易解决 | 速度相对慢、联网工作、处理冲突相对繁琐 |
文件存储格式 | 按照元数据方式存储,体积小。 | 按照原始文件存储,体积较大。 |
是否有版本号 | 没有全局版本号 | 有 |
分支操作的影响 | 可在本地随便创建分支,不影响其他开发人员 | 影响中央服务器的分支。 |
提交操作 | 先提交到本地,然后push到远程仓库 | 直接提交到中央服务器 |