首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空提交是否在git中有一个空树?

空提交是否在git中有一个空树?
EN

Stack Overflow用户
提问于 2020-07-15 02:44:56
回答 2查看 690关注 0票数 4

我读过这个Git内部件,关于树对象的一些事情还不是很清楚。

实际上,当前的分支是master。主服务器上的最后提交对象是空提交,由cmt_end表示。由git-commit-tree提供的提交对象只有一个树对象。因此,cmt_end的树对象由tree_end表示。

我的困惑是:

  • git-commit提供,git-commit记录存储库中的更改。这是否表明tree_end包含了cmt_end与其父之间的差异?如果是的话,tree_end应该是一个空树,因为cmt_end是一个空提交。如果没有,是否可以为空提交创建一个空树?
  • --allow-empty选项在git-commit中表示,空提交具有与其唯一父提交完全相同的树。这是否表示提交的树对象记录整个工作目录,而不是在执行git-commit时进行更改?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-15 03:09:08

树对象记录整个工作目录。提交对象记录树对象和其他条目,如作者名称、提交者日期和提交消息,您可以在git log -1 <commit> --pretty=rawgit cat-file -p <commit>中看到这些条目。

--allow-empty指示git commit创建一个提交对象,该对象重用其父对象的树对象。如果新提交是没有任何父对象的根提交,则树对象是一个特殊的对象,即空树,其SHA-1为4b825dc642cb6eb9a060e54bf8d69288fbee4904。空树映射到一个空目录,其中没有任何子目录或文件。empty in --allow-empty意味着自上次提交或初始状态以来没有进行任何更改。

当空提交有父节点时,它的树与父节点的树相同。该树可以是空树,也可以是非空树,这取决于父树引用的树。当空提交没有父节点时,它的树总是空树。

票数 4
EN

Stack Overflow用户

发布于 2020-07-15 03:04:35

正如您在最后猜到的,提交中的树对象实际上表示存储库的内容,而不是相对于前一个提交的更改。当提交为空时,这意味着提交表示与上一次提交相关的任何更改,但这并不意味着存储库在提交时不包含任何文件。空提交的树对象将与上一次提交的树对象相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62906821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档