【YOU DON'T KNOW GIT】1.开始探索Git内部原理

162 阅读2分钟

前言

在阅读之前,假设你已对git上层命令有一定的了解。

在这一系列文章中,我们主要讨论Git的底层命令和浅显的内部原理,笔者认为学习这一部分内容对于真正理解Git的用途和Git强大的特性至关重要,是Git的灵魂所在。

底层命令与上层命令

由于 Git 最初是一套面向版本控制系统的工具集,而不是一个完整的、用户友好的版本控制系统, 所以它还包含了一部分用于完成底层工作的子命令。这部分命令一般被称作底层命令,而那些更友好的命令则被称作上层命令。

在日常的开发工作中,我们基本上接触不到底层命令,但底层命令得以让你窥探 Git 内部的工作机制,也有助于说明 Git 是如何完成工作的,以及它为何如此运作。 多数底层命令并不面向最终用户:它们更适合作为新工具的组件和自定义脚本的组成部分。

让我们从 git init 开始吧

当在一个新目录或已有目录执行 git init 时,Git 会创建一个 .git 目录。 这个目录包含了几乎所有 Git 存储和操作的东西。本系列文章探讨的所有内容,均位于这个目录内。 新初始化的 .git 目录的典型结构如下:

image.png

随着 Git 版本的不同,该目录下可能还会包含其他内容(例如尚待创建的index文件)。 不过对于一个全新的 git init 版本库,这将是你看到的默认结构。

  • hooks目录: 包含客户端或服务端的钩子脚本

  • info目录: 包含一个全局性排除文件

  • objects目录: 存储所有数据内容

  • refs目录: 存储指向数据的提交对象的指针(分支)

  • config文件: 包含项目特有的配置选项

  • description文件: 用来显示对仓库的描述信息

  • HEAD文件: 指示目前被检出的分支

  • index文件: 保存暂存区信息

上述文件中有四个特别重要:HEAD 文件、(尚待创建的)index 文件,和 objects 目录、refs 目录,它们都是 Git 的核心组成部分。我们将详细地逐一检视这四部分,来理解 Git 是如何运转的。

【YOU DON'T KNOW GIT】系列

  1. 开始探索Git内部原理(本文)
  2. Git内部原理-Git对象
  3. Git内部原理-树对象
  4. Git内部原理-提交对象

参考资料

1.Pro Git