git 介绍
Git是什么?
Git是目前世界上最先进的分布式版本控制系统,由C编写
那什么是版本控制系统?
版本控制软件提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。——百度百科
简而言之:存储、追踪文件和文件夹的修改历史
git的特点——Git与SVN的主要差别
git在使用上与其他版本控制系统命令形式非常接近,但是在底层设计上,却有着巨大差异。理解这些差异,有助于防止使用中的困惑李
直接记录快照而非差异比较
- 在文件系统中,数据以数据块的形式存储在介质上,文件系统记录了每个文件对于的数据块编号。
- 所有的版本控制软件都不会简单通过复制备份实现文件版本记录。而是在文件系统层面实现的文件状态记录,即保存一个版本,并不是保存一个新文件备份,而是在更小的粒度的记录变化。
- git与其他版本控制系统的主要差别在于git对待数据的方法。其他版本控制系统以单个文件为单位,记录这个文件随时间累计的差异。而git是以整个项目为单位制作一个快照,并保存这个快照的索引。快照中再以单个文件为单位记录整个文件是否发生变化,发生变化才会重新存储该文件。
- 总结:git保存文件时保存的不是文件的变动或差异,而是一系列不同时刻的文件快照。
几乎所有操作都是本地执行
git与其他版本控制系统的另一大区别在于历史版本维护的位置
Git本地仓库:代码库还有历史库,在本地的环境开发就可以记录历史
其他如SVN:历史库存在于中央仓库,每次对比与提交代码都必须连接到中央仓库才能进行
得出git的优势:
- 使用git可以在脱机环境查看开发的版本历史。
- 多人开发时如果充当中央仓库的Git仓库挂了,任何一个开发者的仓库都可以作为中央仓库进行服务。
git保证完整性
git的底层设计是用文件的哈希值来索引的,故所有数据存储前都会计算校验和。这样增加了另一项特性——保证数据的完整性
git一般只添加数据
你执行的任何git操作,几乎都是在git数据库中增加数据。即便是你删除一个文件,在git中只会记录你把文件删除了,但并没有真正删除,文件只是不会再向你展示。当你随时回退到某次版本快照时,文件仍然在那儿。这使得git在数据恢复上具有极大的优势。
git的三个工作区域
-
工作目录
工作目录是对项目的某个版本独立提出出来的内容。放在磁盘上供你使用和改动
注意:当你切换不同分支时,工作目录也会切换到对应分支的工作目录。可以想象成每个分支有独立的工作目录。 -
暂存区域
暂存区包含了即将被提交进入git仓库的文件。但暂存去本质是一个文件,保存的是列表信息
-
git仓库
git仓库保存了项目的元数据和对象数据库,也就是各版本提交历史快照。
git的三种文件状态
-
已提交committed
文件所有内容已经保存进git仓库
-
已修改modified
文件内容有改动,但没传达给git操作
-
已暂存staged
文件的改动已经传达给git,git将其保存到了暂存区。
git的诞生小故事
很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。
Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?
事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!
你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。
不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。
Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。