微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Git内部原理1

Git本质上是一套内容寻址文件系统,在此之上提供了VCS用户界面。

Git底层命令(plumbing) vs 高层命令(porcelain)

Git的高层命令包括checkout、branch、remote等总共约30个,这些命令主要交由用户在命令行界面中使用。而除了高层命令之外,Git还提供一些底层命令,这些命令通常不用于命令行界面,而是交由其它工具和自定义脚本使用。

.Git的目录结构

git init 命令会在文件夹中创建一个.git目录,用于存放所有版本管理相关的内容,其目录结构如下:

1
2
3
4
5
6
7
8
9
10
$ ls
HEAD
branches/
config
description
hooks/
index
info/
objects/
refs/

在该目录下,Git的核心保存在HEAD文件index objects refs目录下。

  • objects 存储所有的数据内容
  • refs存储指向数据的提交对象的指针
  • HEAD 文件指向当前分支
  • index 包含了暂存区的信息

Git 对象

Git是一套内容寻址文件系统,本质是通过键值寻找Git对象。

内容寻址文件系统: 它允许插入任意类型的内容,并返回一个键值(40位);通过该键值可以在任何时候提取这部分内容

数据对象

下面来演示如何向git中插入一个Git数据对象,并获取键值。

git第一个底层命令hash-object

1
2
$ echo 'test content' | git hash-object -w --stdin
d670460b4b4aece5915caf5c68d12f560a9fe3e4

这样,就为git系统添加一个对象,其内容为:

1
2
$ find .git/objects -type f
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4

表示 Git 存储数据内容的方式──为每份内容生成一个文件,取得该内容与头信息的 SHA-1 校验和,创建以该校验和前两个字符为名称的子目录,并以 (校验和) 剩下 38 个字符为文件命名 (保存至子目录下)。

git第二个底层命令cat-file -p 查看对象内容 -t 查看对象类型

通过git cat-file 命令可以查看Git对象,例如:

1
2
$ git cat-file -t 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
blob

树对象

创建一个index,然后将这个index加入一个已有的tree中

大专栏  Git内部原理(1)">

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐