为啥 git 将文件内容存储为 blob?

Posted

技术标签:

【中文标题】为啥 git 将文件内容存储为 blob?【英文标题】:Why does git store file contents as a blob?为什么 git 将文件内容存储为 blob? 【发布时间】:2018-02-24 04:37:02 【问题描述】:

这个问题似乎很容易回答,但我正在努力想出将文件内容存储为 blob 而不仅仅是其原始格式(例如文本文件)的明确优势。

通常情况下,blob 用于代替其他媒体存储格式:图像、视频、音频等。git,至少我认为它常用,通常跟踪文本文件而不是多媒体的修订。

正式总结一下:将文件内容存储为 blob(转换为二进制数据)而不是修订的原始格式(例如,将其保留为文本)有什么优势?

【问题讨论】:

你说的修订的原始格式是什么意思?无论是否为文本文件,文件内容都只是一个字节序列。该字节序列在 Git 中称为 blob。 Blob 确实存储了原始的原始内容。就是这个意思。 在过去的日子里(今天仍然如此),在 数据库 世界中,数据库中的条目通常具有(具有)类型。在这里,有人用backronym Binary Large OBject 发明了术语blob,意思是“未解释的数据”。 Linus Torvalds stole 在 Git 中使用的术语,但与上下文不同。请注意,Git 也将其他内容存储为 blob,特别是符号链接的目标存储为 blob 对象。 【参考方案1】:

“Blob”仅表示字节序列。 Git 中的 blob 将包含与文件相同的数据,只是 blob 存储在 Git 对象数据库中,而文件存储在文件系统中。

所以在格式上没有区别,唯一的区别是它们的存储方式。

例如,如果您将图像hello.jpg 添加到您的存储库,然后提交它,您将拥有相同数据的两个副本:

您将在磁盘上有一个名为hello.jpg文件,其中包含JPEG 数据,

您的 Git 对象数据库中将有一个 blob,以其内容的哈希值命名,其中包含 完全相同格式相同的 JPEG 数据.

数据库可以使用一些花哨的技巧来有效地存储数据,包括压缩和使用增量,但最终它仍然存储与原始文件中完全相同的数据。

文本文件也不例外。 “文本”只是一种特殊类型的数据,可以存储在二进制文件中。

【讨论】:

以上是关于为啥 git 将文件内容存储为 blob?的主要内容,如果未能解决你的问题,请参考以下文章

设置存储在 Blob 上的媒体文件的内容类型

您能否将 Blob 存储中的 JSON 文件的全部内容放入 ADF 变量中?如果是这样,怎么做?

SharePoint 2013 使用 RBS 功能将二进制大型对象 BLOB 存储在内容数据库外部。

从 azure blob 存储中提供 webapp 静态内容

聊聊git中的四大对象

为啥 Azure 数据工厂使用 AppendFile 而不是 PutBlob 将文件写入 Blob 存储容器?