2

我想知道 Git 在哪里保存分支中的所有数据。每次切换分支时,所有数据都会被放回原位,而来自另一个特定分支的数据只会被删除。

在较慢的 CPU/HDD 上从另一个分支带回数据是否需要更长的时间?内部如何运作?

4

1 回答 1

3

Git 将文件数据存储在称为“blob”的对象中。这些存储在.git/objects存储库中的目录中。

Blob 到目录结构的映射是由称为“树”的对象完成的,这些对象是递归的 - 在子目录的情况下,一棵树可以引用其他树。

提交反过来又引用了一个特定的树,它是提交时存储库根目录的状态。

分支只是指向特定提交的指针。

当你签出一个分支时,Git 会去查找它指向的提交。从那里,它加载提交引用的树,并从中获取应该与树中每个位置匹配的精确 blob。然后它将这些 blob 的内容加载到正确的文件路径中。

为了帮助解决这个问题,它使用索引,这是文件状态到目录树中路径的映射,以及它们内容的哈希值和它们最后修改时间的记录。Git 使用这些哈希和 mtime 来快速识别哪些文件需要更新,并加载正确的内容。


任何类型的工作在较慢的 CPU+HDD 上都会花费更长的时间,因为它不受时间的特别限制。它将使用尽可能多的 CPU/磁盘速度。也就是说,Git 相当高效,因此除非您有大量文件或非常大的文件内容更改(或非常慢的设备),否则它通常会很快运行。

于 2012-10-06T22:55:54.090 回答