我知道 Git 不会将数据存储为一系列变更集或增量,而是存储为一系列快照。所以一个文件的两个版本之间没有直接关系,如下所示:
当我使用命令时:
git log test.txt
Git 如何在其文件系统中找到“版本 1 和版本 2”日志?
在我看来:
Git 将遍历所有提交对象(带有父引用),然后遍历树等,以获取特定文件的每个日志信息。
但是,这似乎不是很有效; Git 是否有一些特定的算法来提取日志信息或存储一些额外的信息来获取它?
最佳答案
你的假设是正确的。对于最简单的情况(通过路径名限制日志输出),它的工作原理如下:
- 从提交中获取树
- 路径是否存在于树中?
- 与此路径关联的 blob 的 SHA1 是否与之前的提交不同? -> 输出它
- 获取下一个(父)提交。重复。
关于git - Git的 ‘log filename’内部是怎么实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21178383/