Git 提交可以有多个树对象吗?

Can a Git commit have multiple tree objects?

一个提交对象是否总是只有一个树对象?

我想不出不会出现这种情况的情况,但我也看不到任何明确说明它的文档。

Does a commit object always have exactly one [top-level] tree object?

是的。

I can't think of a scenario where it wouldn't be the case but I also can't see any documentation that explicitly states it.

它是设计的一部分:没有它,git rev-parse <em>commit</em>^{tree} 会没有明确的结果。

可以设想一个系统相关到Git,其中提交可以存储多棵树,1但是许多首先需要解决设计问题。


1我在几个上下文中考虑过这个问题,包括“子模块是错误的,子树更好但需要更好的支持”。我还没有解决所有问题。

请注意,提交对象也需要恰好有一个 author 和一个 committer 行; git fsck 如果格式不正确,将反对提交。