Open bobenut opened 2 years ago
在空的本地工作目录的根路径中添加一个README.md文件,git add后执行提交git commit -m 'do readme'。 提交后,commit指向一个root tree对象,root tree包含一个readme文件对应的blog对象。
README.md
git add
git commit -m 'do readme'
在工作目录中添加文件src/s1.md,git add后执行提交git commit -m 'src s1.md' 本次提交后,可以发现新提交的commit会通过它的parent属性指向前一个commit。 新创建的commit会指向一个新的tree作为root tree。 root tree指向为发生变化的readme blod对象。 root tree指向src文件夹对应的tree对象,src tree又指向它所包含的文件。
src/s1.md
git commit -m 'src s1.md'
在工作目录中添加文件src/interface/i1.md,git add后执行提交git commit -m 'i1.md of interface'。 提交后,新创建的commit依然会指向前一个commit。 新创建的commit同样会指向一个新的tree作为root tree。 从root tree开始每一级tree都会指向未发生变化的文件blob对象。 src文件夹中因为加过了新的子文件夹和文件,因此会生成新的tree对象。
src/interface/i1.md
git commit -m 'i1.md of interface'
在工作目录中添加文件doc/doc1.md,git add后执行提交git commit -m 'doc1.md of doc'。 提交后,新创建的commit依然会指向前一个commit。 从root tree开始每一级tree都会指向未发生变化的文件blob对象。 由于新创建的doc文件夹是和src文件夹平级,因此从root tree开始指向的是未变化过的src tree对象。
doc/doc1.md
git commit -m 'doc1.md of doc'
在工作目录中添加文件doc/backend/backend1.md,git add后执行提交git commit -m 'add backend1.md'。 提交后,新创建的commit依然会指向前一个commit。 从root tree开始每一级tree都会指向未发生变化的文件blob对象,也指向的是未变化过的tree对象。 同样的,doc文件夹下加过内容,所以会生成新的doc tree对象。
doc/backend/backend1.md
git commit -m 'add backend1.md'
在工作目录中添加文件doc/backend/mid/mid1.md,git add后执行提交git commit -m 'add mid1.md'。 提交后,新创建的commit依然会指向前一个commit。 从root tree开始每一级tree都会指向未发生变化的文件blob对象,也指向的是未变化过的tree对象。 同样的,doc文件夹下加过内容,所以会生成新的doc tree对象。
doc/backend/mid/mid1.md
git commit -m 'add mid1.md'
在工作目录中删除文件git rm src/interface/i1.md,执行提交git commit -m 'rm i1.md'。 提交后,新创建的commit依然会指向前一个commit。 很有意思的是,从新建的root tree出发指向了不包含interface tree的src tree对象,那么从当前的commit的root tree出发,是看不到interface tree对象以及src/interface/i1.md文件blob对象。实际上src/interface/i1.md对象还存在与objects下,并且从上一个commit的root tree出发可以看到src/interface/i1.md文件blob对象。
git rm src/interface/i1.md
git commit -m 'rm i1.md'
在工作目录中删除文件git rm README.md,执行提交git commit -m 'rm README.md'。 提交后,新创建的commit依然会指向前一个commit。 同样有意思的是,从root tree出发已经看不到README.md blob对象了。
git rm README.md
git commit -m 'rm README.md'
添加
在空的工作目录中添加第1个文件
在空的本地工作目录的根路径中添加一个
README.md
文件,git add
后执行提交git commit -m 'do readme'
。 提交后,commit指向一个root tree对象,root tree包含一个readme文件对应的blog对象。添加1个文件夹以及1个文件
在工作目录中添加文件
src/s1.md
,git add
后执行提交git commit -m 'src s1.md'
本次提交后,可以发现新提交的commit会通过它的parent属性指向前一个commit。 新创建的commit会指向一个新的tree作为root tree。 root tree指向为发生变化的readme blod对象。 root tree指向src文件夹对应的tree对象,src tree又指向它所包含的文件。添加1个子文件夹以及1个文件
在工作目录中添加文件
src/interface/i1.md
,git add
后执行提交git commit -m 'i1.md of interface'
。 提交后,新创建的commit依然会指向前一个commit。 新创建的commit同样会指向一个新的tree作为root tree。 从root tree开始每一级tree都会指向未发生变化的文件blob对象。 src文件夹中因为加过了新的子文件夹和文件,因此会生成新的tree对象。再添加1个一级的文件夹以及1个文件
在工作目录中添加文件
doc/doc1.md
,git add
后执行提交git commit -m 'doc1.md of doc'
。 提交后,新创建的commit依然会指向前一个commit。 从root tree开始每一级tree都会指向未发生变化的文件blob对象。 由于新创建的doc文件夹是和src文件夹平级,因此从root tree开始指向的是未变化过的src tree对象。在doc中再添加1个子文件夹以及1个文件
在工作目录中添加文件
doc/backend/backend1.md
,git add
后执行提交git commit -m 'add backend1.md'
。 提交后,新创建的commit依然会指向前一个commit。 从root tree开始每一级tree都会指向未发生变化的文件blob对象,也指向的是未变化过的tree对象。 同样的,doc文件夹下加过内容,所以会生成新的doc tree对象。在doc中的最下层子文件夹中添加1个子文件夹以及1个文件
在工作目录中添加文件
doc/backend/mid/mid1.md
,git add
后执行提交git commit -m 'add mid1.md'
。 提交后,新创建的commit依然会指向前一个commit。 从root tree开始每一级tree都会指向未发生变化的文件blob对象,也指向的是未变化过的tree对象。 同样的,doc文件夹下加过内容,所以会生成新的doc tree对象。删除
删除1个文件
在工作目录中删除文件
git rm src/interface/i1.md
,执行提交git commit -m 'rm i1.md'
。 提交后,新创建的commit依然会指向前一个commit。 很有意思的是,从新建的root tree出发指向了不包含interface tree的src tree对象,那么从当前的commit的root tree出发,是看不到interface tree对象以及src/interface/i1.md文件blob对象。实际上src/interface/i1.md对象还存在与objects下,并且从上一个commit的root tree出发可以看到src/interface/i1.md文件blob对象。删除工作目录根路径下的1个文件
在工作目录中删除文件
git rm README.md
,执行提交git commit -m 'rm README.md'
。 提交后,新创建的commit依然会指向前一个commit。 同样有意思的是,从root tree出发已经看不到README.md blob对象了。总结