我阅读了Git 内部原理 - Git 对象,对于一些关于树对象的内容还不是很清晰。
例如,当前分支是master
。在master
上的最终提交对象是一个空提交,并用cmt_end
表示。根据git-commit-tree
,提交对象只有一个树对象。因此,cmt_end
的树对象称为tree_end
。
我的困惑是:
git-commit
记录存储库中的更改。这是否意味着tree_end
包含了cmt_end
和其父级之间的差异?如果是这样,由于cmt_end
是一个空提交,tree_end
应该是一个空树。如果不是这样,那么为空提交使用空树是否可以?git-commit
的--allow-empty
选项表示一个空提交与其唯一的父提交具有完全相同的树。这是否意味着提交的树对象记录整个工作目录,而不是使用git-commit
时所做的更改?
git write-tree
构建的,它使用索引(而不是工作区)来构建树对象。您可以运行git ls-files --stage
查看索引的内容。 - torek