为什么 Git 将文件内容存储为 Blob?

18

这个问题看起来很简单,但我却难以确定将文件内容存储为 BLOB 而不仅仅是其原始格式(例如文本文件)的明显优势。

通常情况下,BLOB 用于替代其他媒体存储格式:图片、视频、音频等。至少在我常见的用法中,git 通常跟踪文本文件的修订,而非多媒体。

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


“原始修订格式”是什么意思?无论文件内容是否为文本文件,它都只是一系列字节。在Git中,这一系列字节被称为blob。 - user4003407
一个 blob 存储的是原始的未经处理的内容。这就是它的含义。 - hobbs
2
在过去(以及今天),在数据库世界中,数据库中的条目通常具有类型。在这里,有人发明了术语blob,并使用反缩略语二进制大型对象来表示“未解释的数据”。Linus Torvalds 窃取了这个术语用于Git,但上下文并不完全相同。请注意,Git还将其他内容存储为blob,特别是符号链接的目标被存储为blob对象。 - torek
1个回答

28
“Blob”指的是一系列的字节。在Git中,Blob包含的数据和文件是完全相同的,只不过Blob存储在Git对象数据库中,而文件存储在文件系统中。 因此,它们的格式没有区别,唯一的区别在于它们如何存储。 例如,如果您将一个名为hello.jpg的图像添加到您的存储库中,然后提交,那么您将拥有相同数据的两个副本: 您将在磁盘上有一个名为hello.jpg的文件,其中包含JPEG数据, 您将在Git对象数据库中拥有一个名为其内容哈希的Blob,其中包含完全相同的JPEG数据以相同的格式。 数据库可以使用一些高级技巧有效地存储数据,包括压缩和使用增量,但最终仍然存储原始文件中的确切相同的数据。 文本文件也不例外。“文本”只是一种特定类型的数据,您可以将其存储在二进制文件中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接