git 的基本概念

Git 是区别于其它以 “基于差异” 的版本控制系统,它的基础核心思想是快照流,它是一种分布式的版本控制系统 --- 每一份副本都保存了全部的信息,它的作者是 Linus Torvalds。

传统的 vcs 存储的是跟原始数据的差异,比如有三个版本,那么分别存储的就是原始数据,差异 a,差异 b,而 git 它每一个版本存储的都是全部数据的快照,它会对于全部文件创建一个快照,并且存储这个快照的索引,如果文件没有修改,那么 git 就不再存储这个文件,而是保留一个指向之前存储文件的链接,git 和传统的版本控制系统具有较大的差异性。

git 几乎不需要联网就能工作,除了少有的几个操作之外它几乎所有操作都是存在于本地,你可以通过本地的 git 存储去寻找此时此刻和一个月之前的差异。

git 所有数据在存储前都会计算校验和,这就意味着,文件的任何细微的变化 git 都能获悉,git 存储的也不是文件名称,而是文件的哈希值。

git 几乎只能添加数据,不能删除数据,所以你在一个 git 周期内的任何操作,git 都会记录下来,并且不会丢失,所以即便你删除了某个数据,git 也会记录下来。

git 存在了三种状态,分别是已修改,已暂存,已提交。

  • 已修改 (modified):已经修改了文件,但是没有保存在数据库中
  • 已暂存 (staged):对一个已经修改的文件进行了标记,使之包含在下次提交的快照中,所以称之暂时存储。
  • 已提交 committed):表示数据已经安全的存储在了本地数据库中。

git 项目拥有三个阶段:工作区,暂存区,git 目录

  • 工作区:对于项目的某个版本独立提取的内容,从 git 仓库压缩的数据库中提取的文件,放在磁盘上让使用者操作。
  • 暂存区:是一个文件,保存了下次要提交的文件列表信息,一般在 git 仓库中,其实就是索引。
  • git 仓库目录:git 用来保存项目元数据和对象数据库的地方,从其它计算机克隆的时候就是复制的这里的数据。

git 基本的工作流程:

  • 在工作区中修改文件
  • 将想要下次提交的更改选择性的暂存,因为选择性的暂存,所以只会将更改的部分添加到暂存区域。没有更改的部分直接指向之前的版本即可。
  • 提交更新,找到暂存区标记的文件,将快照存储在 git 目录下。