【问题标题】:How to git ls-tree from a commit object?如何从提交对象 git ls-tree?
【发布时间】:2021-02-10 15:58:19
【问题描述】:

根据文档,为了使用git ls-tree,您需要传递树对象的哈希值。如果我想从提交对象开始获得与git ls-tree 相同的输出怎么办。 我显然可以这样做:

git ls-tree $(git cat-file -p my_commit | grep -oP "(?<=tree ).*")

但我觉得我正在重新发明轮子。有没有一个 git 命令已经这样做了?

【问题讨论】:

  • "...为了使用 git ls-tree,您需要传递树对象的哈希..." 错误,任何提交或指向提交的指针都可以。 @HEADmaster^2~,任何分支或标签……
  • 谢谢@phd,我什至尝试在 git 上使用提交哈希,但不知何故我显然犯了一个错误。我也完全误解了文档所指的“树式”。非常感谢。

标签: linux git internals


【解决方案1】:

不,git ls-tree 需要 tree-ish object

这里的“-ish”后缀很重要。根据Cambridge Dictionary

-ish 后缀(QUITE)

用来构成形容词以在一定程度上赋予意义;公平:

  • 他的胡子有点红。
  • 她年纪大了 - 我会说大约 60 岁。
  • 我们将从七点钟开始(= 大约七点钟)。

在这种情况下,“tree-ish”的意思是像一棵树。当然,一棵树就像一棵树。但是commit像一棵树,因为它只有一个树组件;这意味着您可以通过简单地使用提交本身来明确地引用该树。

所以,只需git ls-tree &lt;commit-ish&gt;

【讨论】:

  • 感谢@EdwardThomson 的字典参考和解释(是的,我不是英语),但我认为说“提交也像一棵树,因为它只有一个树组件并且只需使用提交本身,即可识别树。”是一个错误:一棵树可以属于许多提交。
  • this 定义会更正确:“Tree-ish”是指任何标识符 [...] 最终导致(子)目录树的术语 i>.
  • 一个提交只有一棵树并不意味着一棵树不能是多个提交的一部分。
  • (甚至是其他树的一部分。)
  • 是的,我猜我们说的是同一件事。我只是不喜欢那个“确定”,但现在我明白了你的意思。基本上,由于提交具有单个根树,因此 -ish 指的是使用提交哈希没有歧义。
猜你喜欢
  • 2017-09-10
  • 2015-12-04
  • 2011-05-21
  • 2014-11-25
  • 1970-01-01
  • 2015-05-07
  • 2014-05-09
  • 2015-03-08
  • 2019-02-14
相关资源
最近更新 更多