git文件存储原理解析(八)

freemandealer 2016-02-02

1.git的目录结构

 1.1 新建一个git-test空文件夹,使用git init 初始化,交由git管理

  git文件存储原理解析(八)

  1.2 .git 目录下 文件夹结构如下:

  git文件存储原理解析(八)

  

2.git如何保存数据?

  2.1.对象类型

  从内部来看,Git 是简单的 key-value 数据存储。它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容。可以通过底层命令hash-object 来示范这点,传一些数据给该命令,它会将数据保存在 .git 目录并返回表示这些数据的键值。

   tree对象

   blob对象

   commit对象

   tag对象

  对象之间关系:(参考git-scm.com官网图例)

  git文件存储原理解析(八)

   2.2. 向git-test写入一个文件file.txt,观察.git目录下变化

   对文件进行add  --> commit 才会发现objects文件目录才发生变化,也就是说 git 在每次对本地版本库 进行commit的时候,就会对数据 进行一次保存,这是 会生成 commit对象,tree对象以及blob对象。Git 存储数据内容的方式──为每份内容生成一个文件,取得该内容与头信息的 SHA-1 校验和,创建以该校验和前两个字符为名称的子目录,并以 (校验和) 剩下 38 个字符为文件命名 (保存至子目录下)。

通过 cat-file 命令可以将数据内容取回。该命令是查看 Git 对象的瑞士军刀。

  

   git文件存储原理解析(八)

做些修改后再次提交,那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。

git文件存储原理解析(八)

 我们使用命令行查看一下刚刚写入文件变化:

  第一次commit   file.txt

  第二次commit   file2.txt  file3.txt

  参考下面截图:

  1).查看2次提交的commitId ,以及 git cat-file 命令使用

  git文件存储原理解析(八)

  2).查看第一次commit tree blob 类型 及存储类容

  git文件存储原理解析(八)

  3).查看第二次commit tree blob 类型及内容

  git文件存储原理解析(八)

  

 2.3 分支以及对象应用关系如下:

 git文件存储原理解析(八)

相关博客:

1).Git 版本控制工具介绍(一)

  2).Git 工作流程介绍(二)

  3).Github的使用(三)

  4).Git 常用命令(四)

  5).Git 版本回退(五)

  6).Git版本冲突解决(六)

  7).git 分支管理(七)

  8).git文件存储原理解析(八)

相关推荐