bobenut / me

1 stars 0 forks source link

Git学习之对仓库进行文件CRUD,观察Object间关系的变化 #66

Open bobenut opened 2 years ago

bobenut commented 2 years ago

添加

在空的工作目录中添加第1个文件

在空的本地工作目录的根路径中添加一个README.md文件,git add后执行提交git commit -m 'do readme'。 提交后,commit指向一个root tree对象,root tree包含一个readme文件对应的blog对象。 Unknown-2

添加1个文件夹以及1个文件

在工作目录中添加文件src/s1.mdgit 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.mdgit add后执行提交git commit -m 'i1.md of interface'。 提交后,新创建的commit依然会指向前一个commit。 新创建的commit同样会指向一个新的tree作为root tree。 从root tree开始每一级tree都会指向未发生变化的文件blob对象。 src文件夹中因为加过了新的子文件夹和文件,因此会生成新的tree对象。 流程图-2

再添加1个一级的文件夹以及1个文件

在工作目录中添加文件doc/doc1.mdgit add后执行提交git commit -m 'doc1.md of doc'。 提交后,新创建的commit依然会指向前一个commit。 从root tree开始每一级tree都会指向未发生变化的文件blob对象。 由于新创建的doc文件夹是和src文件夹平级,因此从root tree开始指向的是未变化过的src tree对象。 流程图-3

在doc中再添加1个子文件夹以及1个文件

在工作目录中添加文件doc/backend/backend1.mdgit add后执行提交git commit -m 'add backend1.md'。 提交后,新创建的commit依然会指向前一个commit。 从root tree开始每一级tree都会指向未发生变化的文件blob对象,也指向的是未变化过的tree对象。 同样的,doc文件夹下加过内容,所以会生成新的doc tree对象。 流程图-4

在doc中的最下层子文件夹中添加1个子文件夹以及1个文件

在工作目录中添加文件doc/backend/mid/mid1.mdgit add后执行提交git commit -m 'add mid1.md'。 提交后,新创建的commit依然会指向前一个commit。 从root tree开始每一级tree都会指向未发生变化的文件blob对象,也指向的是未变化过的tree对象。 同样的,doc文件夹下加过内容,所以会生成新的doc tree对象。 流程图-5

删除

删除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对象。 流程图-6

删除工作目录根路径下的1个文件

在工作目录中删除文件git rm README.md,执行提交git commit -m 'rm README.md'。 提交后,新创建的commit依然会指向前一个commit。 同样有意思的是,从root tree出发已经看不到README.md blob对象了。 流程图-7

总结