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