Git本质上是一套内容寻址文件系统
,在此之上提供了VCS
的用户界面。
Git底层命令(plumbing) vs 高层命令(porcelain)
Git的高层命令包括checkout、branch、remote等总共约30个,这些命令主要交由用户在命令行界面中使用。而除了高层命令之外,Git还提供一些底层命令,这些命令通常不用于命令行界面,而是交由其它工具和自定义脚本使用。
.Git的目录结构
git init
命令会在文件夹中创建一个.git
目录,用于存放所有版本管理相关的内容,其目录结构如下:
1 | $ ls |
在该目录下,Git的核心保存在HEAD
文件和 index
objects
refs
目录下。
Git 对象
Git是一套内容寻址文件系统,本质是通过键值寻找Git对象。
数据对象
下面来演示如何向git中插入一个Git数据对象,并获取键值。
git第一个底层命令hash-object
1
2 $ echo 'test content' | git hash-object -w --stdin
d670460b4b4aece5915caf5c68d12f560a9fe3e4
1 | $ find .git/objects -type f |
表示 Git 存储数据内容的方式──为每份内容生成一个文件,取得该内容与头信息的 SHA-1 校验和,创建以该校验和前两个字符为名称的子目录,并以 (校验和) 剩下 38 个字符为文件命名 (保存至子目录下)。
git第二个底层命令cat-file -p 查看对象内容 -t 查看对象类型
通过git cat-file
命令可以查看Git对象,例如:
1 | $ git cat-file -t 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a |