1、最初的本地版本控制系统
最初人们习惯用复制整个项目用编号处理来保存不同的版本信息,但是这么做有很大的弊端,很容易混淆并且容易出错覆盖掉重要的文件,为了解决这些问题,人们开发了许多本地版本控制系统,大多是采用某种简单的数据库来记录文件的历史更新差异。其中比较流行的RSC,它的工作原理是在硬盘上保存补丁集,意思是文件修订前后的变化,通过查看补丁,可以重新计算出各个版本的文件内容。
2、集中化的版本控制系统
之后由与要解决人们在不同开发系统上协作开发问题,出现了集中化的版本控制系统 (Centralized Version Control Systems,简称 CVCS);这类系统如CVS、Subversion等都是有一个单一的集中管理的服务器,会保存所有的文件的修订版本,而协同工作的人们都能通过自己的客户端连接这台服务器,读取或者提交最新的文件更新。
相对老式的本地控制系统,好处是每个协同人员在一定程度上知道项目的整体更新进度,知道其他人做了什么,并且利于管理员集中管理;但是缺点是:中央服务器可能出现的单点故障,只要服务器出现宕机,所有的客户端都无法提交更新,必须等待服务器重新开始。如果中心数据库所在的磁盘发生损坏,又没有做恰当的备份,则会丢失所有的数据,包括项目的整个变更历史。
3、分布式版本控制系统
之后又出现了分布式版本控制系统 (Distributed Version Control System,简称 DVCS),这类系统如Git等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整的镜像保存下来。这样任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像恢复本地仓库。实际上每次更新都是一次对代码仓库的完整备份。
相对集中式的版本控制系统,分布式的版本控制系统相当于每一个客户端都可以保存一个副本映像,没有中央服务器统一管理,则任意一个客户端出现问题丢失数据可以直接重其他的客户端拷贝恢复数据即可。
4、Git的历史
主要是Linux创始人为了便于管理和维护庞大的Linux内核而开发的分布式版本管理系统;
系统的特性:
(1)速度
(2)简单的设计
(3)对非线性开发模式的强力支持,允许成千上万个并行开发的分支
(4)完全分布式
(5)有能力高效管理类似Linux内核一样的超大规模的项目
5、Git基础
Git与其他版本控制系统最大的区别在于Git对待数据的方法。概念上来区分,其他大部分系统以文件变更列表的方式存储信息。这类系统如CVS等,它们是将保存的信息看作是一组基本的文件和每个文件随时间逐步积累的差异;
图1:为一般的存储流,即每次存储每个版本的差异,并不是存储每个更新版本的全部信息,只是保存版本之间的差异信息;
图2:为Git的快照流存储方式,Git更像把数据看作是对小型文件系统的一组快照;每次提交更新,或在Git中保存项目状态时,它主要是对但是的全部文件制作一个快照保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
6、Git的优点
(1)近乎所有操作都是在本地执行
a、Git中绝大多数操作都只需要访问本地文件和资源,由于是本地操作,所以操作速度非常快,不需要联网操作,联网只是在需要更新项目文件的时候,即你可以在断网的情况继续完成项目等有网络时候上传更新即可;
b、本地会保存所有的历史版本,查看非常方便,不需要由远程服务器处理或从远程服务器拉回旧版本文件再来本地处理;
(2)Git保证数据的完整性
Git中所有的数据存储前都会计算文件校验和,利用的SHA-1散列,hash函数,来确定对比文件是否已经被修改或者损坏;
(3)Git一般只执行添加数据操作
Git在执行时几乎只往Git数据库中增加数据,很难让Git执行任何不可逆操作,或者让它以任何方式清楚数据。同别的VCS一样,未提交更新时可能丢失或者弄乱修改的内容,但是一旦你提交快照到Git中,就难以再丢失数据;
7、Git的三种状态
(1)已提交(committed):已提交表示数据已经安全的保存在本地数据库中;
(2)已修改(modified):已修改表示修改了文件,但是还没有保存在数据哭中;
(3)已暂存(staged) :已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中;