git 和其它版本控制操作起来命令形式相近,但是在保存和对待各种信息的silhouette与其它版本控制系统有很大差异。
一、直接记录快照,而非差异比较
Git 和其它版本控制系统(包括Subversion工具)的主要区别在于Git 对待数据的方法。概念上来区分,其它大部分系统以文件变更方式存储信息。这类系统(CVS、Subversion、Perforce、Bazaar 等等)将它们保存的信息看作史一组基本文件和每个文件随时间逐步累计差异。

图一: 存储每个文件与初始文件的差异
GIt 不按照以上方式对待和保存数据。反之,Git更像是把数据看作史对小型文件系统的一组快照。 每次你提交更新,或在Git中保存项目状态时,它主要对当时的全部文件制作一个快照并保存遮盖快照的索引。为了高效,如果文件没有修改Git不再重新存储该文件,而史只保留一个链接指向之前存储的文件。Git对待数据更像一个快照流。

图二:存储项目随时间改变的项目
这是Git与其它版本控制系统的重要区别。Git重新考虑乐以前每一代版本控制系统延续下来的诸多方面。Git 更像一个小型的文件系统,提供了需过以此为基础的超强工具,而不只是一个简单的VCS。
二、近乎所有的操作都是本地执行
在Git中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机信息。如果你习惯于所有操作都有网络延时开销的集中式版本控制系统,Git在这方面会让你感到速度。因为你在本地磁盘尚就有项目的完整历史,所以大部分操作看起来都是瞬时完成的
举个例子,要浏览项目的历史,Git 不需要外连接到服务器去获取历史,然后再显示出来——它只需要直接从本地数据库中读取。你能立即看到项目的历史。如果你想查看当前版本与一个月前的版本之间引入的修改。Git会查找到一个月前的文件做一次本地差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本文件再来 本地处理。
这也意味这你离线或者没有VPN时,几乎可以进行任何操作。如你在飞机或者火车尚想做些工作,你能愉快的地提交,直到有网络链接时再上传。如你回家后VPN 客户端不正常,你仍能工作。使用其它系统,做到如此是不可能或者很费力的。比如,,用Peforce,你没有连接服务器时几乎不能做什么事;用Subversion和CVS,你能修改文件,但不能向数据库提交修改(因为你的本地数据库离线乐)。这看起来不史大问题,但是你可能会惊喜地发现它带来的巨大不同。
GIt 保证完整性
Git 忠所有数据在存储前都计算校验和,然后以校验和来引用。这意味着不可能在Git不之情时更改任何文件内容或目录内容。这个功能建构在Git底层,史构成Git哲学不可或缺的部分。若你在传送过程忠丢失信息或损坏文件,Git旧能发现。
Git用亦计算校验和的机制叫做SHA-1散列(hash,哈希)。这是一个由4个十六进制字符(0-9和a-f)组成字符串,基于Git中文件的内容或目录结构计算出来。SHA-1哈希看起来史这样的:
24b9da6552252987aa493b52f8696cd6d3b00373
Git 中使用这种哈希值情况很多,你将经常看到这种哈希值。实际上,Git数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。
Git 一般只添加数据
你执行的Git操作,几乎只往Git数据库忠增加数据。很难让Git执行任何不可逆的caozuo,或者让它以任何方式清除数据。同别的CVS一样,未提交更新时可能丢失或者弄乱修改内容;但是一旦你提交快照到Git忠,就难以再丢失数据,特别史如果你定期的推送数据库到其它仓库的话。
这使得我们使用Git成为一个安心愉悦的过程,因为我们深知可以尽情做各种尝试,而没有把事情弄糟的危险。
Git 三种状态
GIt 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)、和已暂存(staged)。已提交表示数据已经安全的保存在本地数据库中。已修改表示修改了文件,但还没有保存到数据库中。已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
由此引入Git项目的三个工作区域概念:Git仓库、工作目录以及暂存区域。

图三:工作目录、暂存区域和GIt仓库
Git 仓库目录是Git用来保存项目的元数据和对象数据库的地方。这是Git中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录是对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库中提取出来的文件,放在磁盘尚供你使用或修改。
暂存区域史一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作“索引”,不过一般说法还是叫暂存区域。
基本的Git工作流程如下:
1、在工作目录中修改文件。
2、暂存文件,将文件的快照放入暂存区域。
3、提交更新,找到暂存区域的文件,将快照永久性存储到Git 仓库目录。
如果Git目录中保存着的特定版本文件,就属于已提交状态。如果作了修改并已经放入暂存区域,就属于暂存状态。如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。
本文深入探讨Git的工作原理,包括其独特的快照记录方式、本地操作优势及数据完整性保障。介绍了Git如何通过快照而非差异来追踪文件变化,并强调了几乎所有Git操作都可以离线执行的特点。


被折叠的 条评论
为什么被折叠?



