为什么git索引文件是二进制文件?

时间:2014-12-02 09:47:15

标签: git binaryfiles git-index

我的Git目录中的大多数文件都是纯文本文件(压缩的松散对象和包文件除外)。因此,我可以编辑和编辑.git/HEAD.git/refs/heads/master等文件,并检查存储库是否已损坏。

但是.git/index是一个二进制文件。纯文本文件不是更有用,因为它可以很容易地手工修改吗?

Scott Chacon在他的presentation中显示了以下图片(幻灯片278): Index by Scott Chacon

在我看来,这很容易被放到一个纯文本文件中。

那为什么它是二进制文件而不是纯文本文件?

2 个答案:

答案 0 :(得分:5)

答案给出的理由都没有充分解决提出的问题,即“为什么Git索引文件是二进制文件?”。接受的答案是不正确的。索引不“包含”任何纯文本文件 - 它包含引用到纯文本文件。此外,要说Git索引包含“索引条目”,实际上根本没什么用处,特别是对于寻求真理的开发人员...最后,树不会被索引缓存 - 引用树被缓存了。

索引不是二进制的,因为它是“索引”的(如上面评论中的海报所述) - 并且它本身并不是“性能原因”的二进制。索引中的所有内容都可以使用纯文本文件表示 - 即使二进制索引文件中表示的标志和位也可以表示为ASCII。它是二进制文件,因为包含按位标志的二进制文件格式能够更有效地使用磁盘空间。而且,了解Linus,它可能是二进制的,以便通过易于访问的文本编辑器来阻止新手的篡改。

*新信息* 索引的第4版实现了路径压缩,在大型回购的索引大小上节省了大约50%。 (来源:https://git-scm.com/docs/git-update-index)这种压缩适用于二进制格式的索引文件。

答案 1 :(得分:3)

What does the git index contain EXACTLY?”中显示的索引包含元数据,noted belowJazimov引用

  • index entries:对条目的引用,包含元数据(时间,模式,大小,SHA1,...)
  • cached trees,它引用树(“可以从索引派生的树的预先计算的哈希值”),这有助于加速从新索引的索引生成树对象。

这些数据的串联使它成为二进制文件,尽管实际原因是纯粹的推测。 能够手动修改它。