美文网首页Android开发经验谈Android开发Git
Git是如何保存和记录数据的——数据对象

Git是如何保存和记录数据的——数据对象

作者: AntDream | 来源:发表于2019-07-10 11:27 被阅读3次

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

Git系列

数据对象(blob)——保存文件内容

首先我们先来向Git仓库中存储数据

//终端输入,其中 -w 参数就表示向Git仓库中写入
echo 'test content' | git hash-object -w --stdin
//输出
d670460b4b4aece5915caf5c68d12f560a9fe3e4

上面命令的功能是向Git仓库中存入 test content ,我们会看到输出了一串40位长度的内容,而且可以在 objects 目录下看到一个文件。

objects目录下的文件

这就是开始时 Git 存储内容的方式——一个文件对应一条内容,以该内容加上特定头部信息一起的 SHA-1 校验和为文件命名。 校验和的前两个字符用于命名子目录,余下的 38 个字符则用作文件名。

然后我们看看这个文件的内容:

Git存储内容的形式

我们会发现这个文件里面并不是test content,那这个文件内容怎么就变了呢?

文件内容的存储过程:
  1. 首先生成一个头部信息,这个头部信息由几部分构成:类型的标记(这里是blob)、空格、数据内容的长度,最后是一个空字节,比如刚刚的情况就是 "blob 16\u0000"
  2. 头部信息和原始数据拼接起来,然后计算出 SHA-1 校验和 ,这样就得到了上面的一串40位的值
  3. 具体存储的内容则通过 zlib 压缩,上面计算出的值前两位做目录,后38位做文件名生成文件并写入,压缩以后,原来的test content就变成上面图中的内容了
从Git仓库把内容取出
//把内容取出来
git cat-file -p 70460b4b4aece5915caf5c68d12f560a9fe3e4
//输出
test content

上面我们演示的是直接同Git仓库操作数据,包括存数据取数据,而我们实际开发中,一般都是操作文件,对文件进行版本控制

操作文件——对文件进行版本控制

下面我们来看看Git仓库是怎么对文件进行版本控制的

//我们先创建一个文件 test.txt ,内容为 version 1
echo 'version 1' > test.txt

上述命令我们就创建了一个内容为 version 1 , 文件名为 test.txt 的文件,这个时候如果我们用 git status命令可以查看当前工程所有状态(开头说的3种状态)的文件信息,以及操作提示,这个是一个很有用的命令

直接用上面写入内容的方法向Git仓库中写入数据,也就是

//直接向Git中写入数据
git hash-object -w test.txt
//输出
83baae61804e65cc73a7201a7252750c76066a30

我们可以把内容取出来看看:

//取出刚刚存的内容
git cat-file -p 83baae61804e65cc73a7201a7252750c76066a30
//输出
version 1

这就是存储文件的过程

上述方式有什么问题?

  • 存储的内容没问题,那我的文件名呢?文件名去哪了?
  • 我需要拿回之前的数据,我得记住每一个文件的SHA-1 值,而且是每一个文件每一个版本!

怎么解决这些问题呢?这就需要Git中的第二个对象—— 树对象。下一次我们就来看看树对象


                         欢迎关注我的公众号查看更多精彩文章!
AntDream

相关文章

  • Git是如何保存和记录数据的——数据对象

    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一...

  • git学习日志-git保存数据的简介

    接下来几章将学习git分支,但是在了解git分支之前,有必要先回顾下git是如何保存数据及数据的组成: git保存...

  • Git的命令和使用

    Git原理 每个项目都有一个 Git 目录,它是 Git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克...

  • Git系列--Git仓库

    简介 前一篇文章中简单引入了Git仓库的概念--用来保存项目的元数据和对象数据库的地方,是整个Git数据库的集合;...

  • Git简介

    Git原理及特性 每个项目都有一个git目录,它是Git用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆...

  • Git使用介绍

    1.Git基本概念——工作区域和状态 1.1.工作区域 Git仓库:用来保存项目的元数据和对象数据库的地方,克隆仓...

  • Git入门篇

    git初识 每个文件在Git中都只有三种状态 每个项目都有一个git目录,git目录是用来保存元数据以及对象数据库...

  • 如何正确理解区块链去中心化和中心化

    如何理解区块链去中心化的意思 传统记录数据的方式是把数据记录保存到单个电脑或者服务器上,这就是中心化保存记录数据的...

  • Git 分支 - 分支简介

    分支简介 在进行提交操作时,Git 会保存一个提交对象(commit object)。知道了 Git 保存数据的方...

  • 实现序列化的两种方式Serializable和Parcelabl

    序列化的目的(1).永久的保存对象数据(将对象数据保存在文件当中,或者是磁盘中)(2).通过序列化操作将对象数据在...

网友评论

    本文标题:Git是如何保存和记录数据的——数据对象

    本文链接:https://www.haomeiwen.com/subject/yckdhctx.html