git工作流(三) ——git深入

前两篇文章分别说了git简史与git基础以及git分支,那么这篇文章开始简单描述一下git深入

Git深入

在 Git 中提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容快照的指针,包含本次提交的作者等相关附属信息,包含零个或多个指向该提交对象的父对象指针:首次提交是没有直接祖先的,普通提交有一个祖先,由两个或多个分支合并产生的提交则有多个祖先

  • 存储快照——仓库中的各个对象保存的数据和相互关系如下
单个提交对象在仓库中的数据结构 文字描述
image
git commit 提交对象前,git会先计算每一个子目录的校验和,然后在git仓库中将目录保存为树对象,所以在创建提交对象不担包含提交信息还包含指向树(项目根目录)的指针,在将来需要的时候,重现此次快照的内容

如上五个对象:三个文件快照内容blob对象,一个目录树内容及其中各个文件对应 blob 对象索引的 tree 对象,一个包含指向 tree 对象(根目录)的索引和其他提交信息元数据的 commit 对象

  • git存储解构示意图
图示 文字描述
image
有三个提交的Git仓库可简化为左图
image
上面只有提交的图补上分支后
image
上面的图补上HEAD后,如左图所示


  • .git目录介绍

Git仓库下有一个.git目录,里面存储了git全部的秘密,一般包括下面的内容:

  1. config
    config是仓库的配置文件,一个典型的配置文件如下,我们创建的远端,分支都在配置文件里有表现; fetch操作的行为也是在这里配置的
  2. index
  3. HEAD
    HEAD文件存储的是当前所在的位置,其内容可以使分支名字,40位commit ID
  4. hooks/
  5. logs/
  6. refs/
    refs目录存储都是引用文件,如本地分支,远端分支,标签等
    refs/heads/xxx 本地分支
    refs/remotes/origin/xxx 远端分支
    refs/tags/xxx 本地tag
  7. objects/
    git通过一种算法可以得到任意文件的指纹(40位16进制数字),然后通过文件指纹存取数据,存取的数据都位于objects目录

文章出处:起底Git & Pro Git

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 16,050评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 9,384评论 0 11
  • “无意苦争春,一任群芳妒。零落成泥碾作尘,只有香如故。” ——题记 ...
    一路行阅读 3,043评论 0 3
  • 今天和儿子读了《女娲补天》,又把四个神话故事关联起来给他分析了一下。下午又给儿子对照着字典上的索引页的拼音从a 到...
    珍爱_48e5阅读 968评论 0 0
  • 他们敲打着他们的骨头 我们啃噬着我们的心 他们的眼睛里大半是我们 我们的眼睛里只有我们 他们被名为生活的绳索勒紧 ...
    Kaifive阅读 2,206评论 0 0