Git究竟是怎样的一个系统呢?若你理解Git的思想和基本原理,用起来就是知其所以然,游刃有余。开始学习Git的时候,你要分清楚和其他版本系统的认识,比如Subversion等,避免出现使用时发生混淆。
直接记录快照,而非差异性比较
Git和其他版本控制系统(Subversion等)的主要差别在于Git对待数据的方法。从概念上来区分,其他版本控制系统以文件变更列表的方式存储信息。这类系统(CVS、Subversion等)将它们保存的信息是基于一组文件和每个文件随着时间逐步累积的差异。
存储的每个文件与初始版本的差异Git则不会按照上面的方式来存储数据。Git更像是把数据看成是对文件系统的一个快照,每次你提交更新或者在Git中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不在重新存储改文件,而是只保存一个链接指向之前存储的文件。Git对待文件更像是一个快照流。
存储项目随时间改变的快照这是Git与几乎所有其他版本控制系统的重要区别。
几乎所有的操作都是在本地进行
在Git中绝大多数时候只需要访问本地的文件和资源,一般不需要访问来自网络上其他计算机的信息。由于绝大多数都是在本地操作,所以Git会让你感到飞一般的速度。
举个例子,要浏览历史,Git不需要外链到服务器去获取版本历史,然后再显示出来。它只需要从本地数据库中读取即可。所以你可以立即得到版本历史。其他关于版本控制的操作也是这样的道理。
Git保证数据完整性
Git中所以的数据存储前都计算校验和,然后以校验和来引用。这意味着不可能在Git不知情的情况修改文件内容或者目录内容。若你在传输过程中丢失信息或者损坏文件,Git都可以发现。
Git用户计算校验和的算法叫做SHA-1散列(hash,哈希)。这是一个有40个十六进制字符(0-9 a-f)组成的字符串,基于Git中文件内容和目录计算出来的。SHA-1看起来是这样的:
24b9da6552252987aa493b52f8696cd6d3b00373
实际上,Git数据库中保存的信息都是以文件内容的哈希值作为索引,而不是文件名。
Git一般只添加数据
你执行的Git操作,一般只往Git数据库中增加数据,很少让Git做一些不可逆操作。同别的 VCS 一样,未提交更新时有可能丢失或弄乱修改的内容;但是一旦你提交快照到 Git 中,就难以再丢失数据,特别是如果你定期的推送数据库到其它仓库的话。
三种状态
Git有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。已提交,表示数据已经安全的保存到本地数据库中了。已修改,表示数据已经修改,还没有保存到本地数据库中。已暂存,表示对一个已修改文件的当前版本做了一个标记,使之包含在下次提交的快照中。
工作目录、暂存区域和Git仓库Git仓库目录是Git用来保存项目的元数据和对象数据库的地方。这是Git的重要组成部分,从其他计算机克隆仓库时,拷贝的就是这里的数据。
工作目录是对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库中提取出来的文件,放到磁盘上面供你使用和修改。
暂存区域是一个文件,保存下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作"索引"。
基本的Git工作流程如下
1. 在工作目录中修改文件。
2. 暂存文件,将文件的快照放到暂存区域。
3. 提交更新,找到暂存区域的文件,将快照永久保存到Git仓库目录。
网友评论