什么是版本控制
版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。有了版本控制你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。你可以比较文件的变化细节,查出是谁最后修改了什么地方从而造成某些怪异问题,又是谁在何时引入了某个功能缺陷,等等。使用版本控制系统通常还意味着,就算你胡来搞砸了整个项目,把文件改的改,删的删,你也可以轻松恢复到原先的样子。
中心化的版本控制系统
CVS、SVN都是中心版本控制系统,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客
户端连到这台服务器,取出最新的文件或者提交更新。
这么做最显而易见的缺点是中央服务器的单点故障。若是宕机一小时,那么在这一小
时内,谁都无法提交更新,也就无法协同工作。如果中央服务器的磁盘发生故障,并且没做过备份或者备份得
不够及时的话,还会有丢失数据的风险。
分布式版本控制系统
GIT就是分布式版本控制系统。相比较中心版本控制系统,首先数据不会丢失,客户端并不只提取最新版本的文件快照,而是把原始的代码
仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的
本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。其次即使作为中央服务器的机器宕机或者网络故障也不会影响使用者的工作和代码的提交,因为你自己的电脑就是版本控制系统的服务器。
GIT基本概念
1、直接快照,而非比较差异
Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文
件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快
照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。
2、
近乎所有操作都可本地执行
因为每一台机器就是一个服务器,所以在不需要网络交互的情况下就可以使用几乎所有操作。
3、
时刻保持数据完整性
Git 使用SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个SHA-1 哈希值,作为指纹字符串。在保存到Git 之前,所有数据都要进行内容的校验和计算,并将此结果作为数据的唯一标识
和索引。
4、
多数操作仅添加数据
GIT中的
多数操作仅添加数据到仓库,所有操作几乎都是可逆的。 其他版本控制系统中可能将已提交的数据和本地未提交的数据搞混甚至会丢失,而GIT中一旦提交数据就很难丢失。
5、三种状态
对于任何一个文件,在Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。
已提交表示该文件已经被安全地保存在本地数据
库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存
的清单中。
根据三种状态git系统中的文件又有三个空间: 工作区,暂存区、数据库。