git和其他版本控制系统的主要区别在于git对待数据的方式。从概念上来说,其他大部分系统以文件变更列表的方式存储信息,这类系统(CVS,Subversion,Perforce,Bazaar等等)将他们存储的信息看作是一组基本文件和每个文件随时间逐步积累的差异(他们通常称作基于差异的(delta-based)的版本控制)。
存储的是每个文件与初始版本的差异。
Git不按照以上方式对待或保存数据。反之,Git更像是把数据看作是对小型文件系统的一系列快照。在Git中,每当你提交更新或者保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。为了效率,如果文件没有修改,Git不在存储该文件,而是只保留一个链接指向之前存储的文件。Git对待数据更像是一个快照流。
Git有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。
- 已修改表示修改了文件,但还没有保存到数据库中。
- 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交表示数据已经安全地保存在本地数据库中。
这会让我们的Git项目拥有三个阶段:工作区、暂存区、以及Git仓库。
工作区是对项目的某个版本独立提取出来的内容。这些从git仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在Git仓库目录中。按照Git的术语叫作“索引”,不过一般来说还是叫“暂存区”。
Git仓库目录是Git用来保存项目目录的元数据和对象数据库的地方。这是Git中最重要的部分,从其他计算机克隆仓库时,复制的就是这里的数据。
基本的Git工作流程如下:
- 在工作区中修改文件。
- 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
- 提交更新,找到暂存区的文件,将快照永久性存储到Git目录