我想知道Git在哪里保存分支机构的所有数据。 每次切换分支时,所有数据都会就地放回原位,而另一个特定分支的数据就会被删除。
较慢的CPU / HDD需要更长时间才能从另一个分支恢复数据吗?内部如何运作?
答案 0 :(得分:3)
Git将文件数据存储在名为“blobs”的对象中。它们存储在存储库中的.git/objects
目录中。
blob到目录结构的映射是由称为“树”的对象完成的,这些对象是递归的 - 在子目录的情况下,一棵树可以引用其他树。
提交依次引用一个特定的树,该树是提交时存储库根目录的状态。
分支只是指向特定提交的指针。
当你签出一个分支时,Git会去查找它指向的提交。从那里,它加载提交引用的树,并从中获取应该匹配树中每个位置的精确blob。然后,它将这些blob的内容加载到正确的文件路径中。
为了帮助解决这个问题,它使用索引,它是文件状态到目录树中路径的映射,以及它们内容的散列和上次修改时间的记录。 Git使用这些哈希和mtimes来快速识别需要更新的文件,并加载适当的内容。
任何类型的工作都会在较慢的CPU + HDD上花费更长的时间,因为它不受时间限制。它将使用尽可能多的CPU /磁盘速度。也就是说,Git相当高效,所以除非您有大量文件或非常大的文件内容更改(或设备速度非常慢),否则通常会非常快。