Git是一个分布式版本控制系统(Distributed Version Control System,简称 DVCS)。因为每一次的克隆操作,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。
1. Git对待数据——直接记录快照,而非差异比较
Git 和其它版本控制系统的主要差别在于对待数据的方法,其它大部分系统以文件变更列表的方式存储信息,将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。如下图所示:
Git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流,如下图所示:
2. Git保证数据的完整性
Git 中所有数据在存储前都计算校验和,然后以yi校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成的字符串,基于 Git 中文件的内容或目录结构计算出来。
3. Git文件的三种状态:已提交、已修改和已暂存
Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged):
- 已提交:表示数据已经安全的保存在本地数据库中。
- 已修改:表示修改了文件,但还没保存到数据库中。
- 已暂存:表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
4. Git项目的三个工作区域:Git仓库、工作目录和暂存区域
- Git仓库:是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
-
工作目录:是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
- 暂存区域:是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作索引,不过一般说法还是叫暂存区域。
5. Git的基本工作流程
基本的 Git 工作流程如下:
- 在工作目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
6. 用户信息
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改。设置方法如下:
再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。
7. 记录每次更新到仓库
工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。
- 已跟踪的文件:是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。
- 未跟踪的文件:工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。
编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 我们逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复。所以使用 Git 时文件的生命周期如下: