前言
在阅读之前,假设你已对git上层命令有一定的了解。
在这一系列文章中,我们主要讨论Git的底层命令和浅显的内部原理,笔者认为学习这一部分内容对于真正理解Git的用途和Git强大的特性至关重要,是Git的灵魂所在。
底层命令与上层命令
由于 Git 最初是一套面向版本控制系统的工具集,而不是一个完整的、用户友好的版本控制系统, 所以它还包含了一部分用于完成底层工作的子命令。这部分命令一般被称作底层命令,而那些更友好的命令则被称作上层命令。
在日常的开发工作中,我们基本上接触不到底层命令,但底层命令得以让你窥探 Git 内部的工作机制,也有助于说明 Git 是如何完成工作的,以及它为何如此运作。 多数底层命令并不面向最终用户:它们更适合作为新工具的组件和自定义脚本的组成部分。
让我们从 git init 开始吧
当在一个新目录或已有目录执行 git init 时,Git 会创建一个 .git 目录。 这个目录包含了几乎所有 Git 存储和操作的东西。本系列文章探讨的所有内容,均位于这个目录内。 新初始化的 .git 目录的典型结构如下:
随着 Git 版本的不同,该目录下可能还会包含其他内容(例如尚待创建的index文件)。 不过对于一个全新的 git init 版本库,这将是你看到的默认结构。
-
hooks目录: 包含客户端或服务端的钩子脚本
-
info目录: 包含一个全局性排除文件
-
objects目录: 存储所有数据内容
-
refs目录: 存储指向数据的提交对象的指针(分支)
-
config文件: 包含项目特有的配置选项
-
description文件: 用来显示对仓库的描述信息
-
HEAD文件: 指示目前被检出的分支
-
index文件: 保存暂存区信息
上述文件中有四个特别重要:HEAD 文件、(尚待创建的)index 文件,和 objects 目录、refs 目录,它们都是 Git 的核心组成部分。我们将详细地逐一检视这四部分,来理解 Git 是如何运转的。
【YOU DON'T KNOW GIT】系列
- 开始探索Git内部原理(本文)
- Git内部原理-Git对象
- Git内部原理-树对象
- Git内部原理-提交对象
参考资料
1.Pro Git