我已经经历了
Git Internals
主要了解Git是如何将事物构造成blob、trees和commits的,并且分支是提交的轻量级指针。
我不太了解的部分是Git如何在分支/提交签出期间将这些更改反映到文件系统中。
例如:
考虑两个文件,
A.txt
和
B.txt
,致力于
Commit 1
. 除了两个文件外,还有一个文件
C.txt
致力于
Commit 2
.
根据我的理解,对象图将沿着以下几行:
-
承诺1
指向
Tree 1
有两个初始文件的斑点-
BlobA
和
BlobB
-
承诺2
指向
Tree 2
有三个文件的斑点。
布洛巴
和
布洛布
保持不变,因为他们的内容没有改变,而
BlobC
也会低于
树2
.
现在,如果我现在在
承诺2
并结账至
承诺1
,
HEAD
现在指向
承诺1
我们可以遍历指示存储库状态的有向图。现在,文件
C.TXT
不再在文件系统上。
每次签出时,Git如何将对象图的状态反映到文件系统上?
谢谢。