首先要弄明白一点,从根本上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。 马上你就会学到这意味着什么。

    • git object

      头部信息和任意内容做SHA-1校验的结果作为文件名(前两个字符用于命名目录,剩下的38个字符命名文件);文件内容由zlib压缩所得,存在.git/objects/

    • tree object

      它能解决文件名保存的问题,也允许我们将多个文件组织到一起。 Git 以一种类似于 UNIX 文件系统的方式存储内容,但作了些许简化。 所有内容均以树对象和数据对象的形式存储,其中树对象对应了 UNIX 中的目录项,数据对象则大致上对应了 inodes 或文件内容。 一个树对象包含了一条或多条树对象记录(tree entry),每条记录含有一个指向数据对象或者子树对象的 SHA-1 指针,以及相应的模式、类型、文件名信息。

  • commit object

    现在有三个树对象,分别代表了我们想要跟踪的不同项目快照。然而问题依旧:若想重用这些快照,你必须记住所有三个 SHA-1 哈希值。 并且,你也完全不知道是谁保存了这些快照,在什么时刻保存的,以及为什么保存这些快照。 而以上这些,正是提交对象(commit object)能为你保存的基本信息。

  • git refs

    我们可以借助类似于 git log 1a410e 这样的命令来浏览完整的提交历史,但为了能遍历那段历史从而找到所有相关对象,你仍须记住 1a410e 是最后一个提交。 我们需要一个文件来保存 SHA-1 值,并给文件起一个简单的名字,然后用这个名字指针来替代原始的 SHA-1 值。在 Git 里,这样的文件被称为“引用(references,或缩写为 refs)”;你可以在 .git/refs 目录下找到这类含有 SHA-1 值的文件。

    • tag object

      前文我们刚讨论过 Git 的三种主要对象类型,事实上还有第四种。 标签对象(tag object)非常类似于一个提交对象——它包含一个标签创建者信息、一个日期、一段注释信息,以及一个指针。 主要的区别在于,标签对象通常指向一个提交对象,而不是一个树对象。 它像是一个永不移动的分支引用——永远指向同一个提交对象,只不过给这个提交对象加上一个更友好的名字罢了。

最新文章

  1. java语言一维数组,对象数组
  2. 谈谈如何在面试中发掘程序猿的核心竞争力zz
  3. DSP28335矩阵键盘的检测
  4. Winform 打印PDF顺序混乱,获取打印队列
  5. linux modprobe.conf怎么不见了—-CentOS 6
  6. js 基于函数伪造的方式实现继承
  7. touches,motion触摸事件响应
  8. 不同的extend 在调用构造函数时不同的写法
  9. ASP.NET中常用方法
  10. UVA - 12230 Crossing Rivers (期望)
  11. RecyclerView中装饰者模式应用
  12. input取值区间实例
  13. 在CentOS 上搭建nginx来部署静态页面网站
  14. Linux简单学习
  15. s11 Docker+DevOps实战--过程和工具
  16. 使用tpcc-mysql进行性能测试
  17. lambda表达式,map函数
  18. DNS使用的是TCP协议还是UDP协议(转)
  19. Pandas对行情数据的预处理
  20. 二进制搭建kubernetes多master集群【三、配置k8s master及高可用】

热门文章

  1. golang简介
  2. eclipse新建maven项目出错 pom.xml报错
  3. vue2.0中router-link详解
  4. [Codeforces712D] Memory and Scores(DP+前缀和优化)(不用单调队列)
  5. Codeforces 1119D(差分)
  6. 验证客户端的合法性、socketserver模块
  7. C# PDF文件转图片
  8. crack Tut.ReverseMe1.exe
  9. jq中的ajax传参
  10. ApacheHttpServer修改httpd.conf配置文件