一、git与其它版本控制系统的区别
Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方式。
git:
- 直接记录快照,而非差异比较。Git 更像是把数据看作是对小型文件系统的一系列快照,在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。 为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待 数据更像是一个 快照流。
- 近乎所有操作都是本地执行。在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。
- Git 保证完整性。Git 中所有的数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件 内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损 坏文件,Git 就能发现。Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组 成的字符串,基于 Git 中文件的内容或目录结构计算出来。 例如:24b9da6552252987aa493b52f8696cd6d3b00373(git数据库中文件保存的索引)
- Git 一般只添加数据。你执行的 Git 操作,几乎只往 Git 数据库中 添加 数据。 你很难使用 Git 从数据库中删除数据,也就是说 Git 几乎 不会执行任何可能导致文件不可恢复的操作。
其它版本(包括 Subversion 和近似工具):以文件变更列表的方式存储信息,这类系统(CVS、Subversion、Perforce、Bazaar 等 等) 将它们存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异 (它们通常称作 基于差异 (delta-based) 的版本控制)。
二、git的三种状态
- 已修改表示修改了文件,但还没保存到数据库中。
- 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交表示数据已经安全地保存在本地数据库中。
git项目的三个阶段: 工作区 ——> 暂存区 ——> Git 目录
git项目的三种状态:已修改(modified)——> 已暂存(staged) ——> 已提交(committed)