当今最流行的版块管理软件无疑就数 Subversion 以及 Git 了。Git 是新兴的优秀的版本管理软件,它和 Subversion 等版本管理软件有很大的区别。这里我们来学习下 Git 相关知识:
直接记录快照而非差异比较
传统的版本管理软件例如 Subversion 以文件变更记录的方式存储信息,它们将保存的信息看作是一组基本文件和每个文件随时间逐步积累的差异:
Git 并不保存这些数据变化,而是将数据看作小型文件系统的一组快照。每次提交更新,它会对当前所有文件制作一快照并保存一个指向这次快照的索引。没有变化的文件不会重复保存,只会保留一个指向之前存储的文件的链接:
几乎所有的操作都在本地执行
Git 中绝大多数的操作只需要访问本地文件和资源,这是因为项目的完整历史记录都会保存到本地磁盘。
例如查看项目的历史记录,只需要直接从本地数据库读取即可。或者你需要提交文件时,可以离线提交到本地仓库,当有网络时再上传到远程仓库。
保证数据完整性
Git 中所有数据在存储前都会计算校验和,然后以校验和来引用。这样如果数据在传输中丢失或损坏,都会及时被发现。
Git 使用了 SHA-1 散列算法,基于 Git 中的文件或目录结构计算校验和,结果是一个包含了40个十六进制字符的字符串,类似如下:
1b492bffed863cc3a945089d2a7a590d0978875f
Git 数据库中保持的信息都是以文件内容的哈希值来索引,而不是文件名。
一般只添加数据
Git 中的操作几乎只会往数据库中添加数据,这和传统的版本管理系统类似,这样可以保证几乎所有的操作都可追溯、可恢复。
Git 工作区域及文件状态
Git 中文件分为已追踪(tracked)和未追踪(untracked)的两种。已追踪的文件纳入了版本管理,在 Git 快照中有它们的记录;没有纳入版本管理的文件就是未追踪的文件。
已追踪的文件分三种状态:已提交(committed)、已修改(modified)、已暂存(staged)。
已提交表示数据已经安全保存到数据库中;已修改表示文件已经被修改,但是没有添加到暂存区域,更没有保存到数据库中;已暂存表示对一个已修改的文件做了标记,放入了暂存区域,可以包含到下次提交的快照中。
Git 项目有三个工作区域:Git 仓库、工作目录、暂存区域:
Git 仓库是用来保存项目的元数据及对象数据库的地方,这是 Git 中最重要的部分,我们从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录是我们当前工作的某个分支、tag 等版本提取出来的内容;我们在当前工作的分支修改的文件,提交时就会提交到对应的分支里;切换分支时,Git 会从数据库中提取对应分支的内容放置到当前工作目录。
暂存区域是一个文件,保存了下次将要提交的文件列表信息,一般存在 Git 仓库目录中,有时也被称作“索引”。
Git 的基本工作流程为:
- 在工作目录中修改文件
- 将修改添加到暂存区域
- 提交更新,保存快照到 Git 仓库