在 git 源代码库中,我可以仅使用 Git 提交树的元数据获取文件名列表及其大小吗?

In a git source repo can I get the list of file names and their sizes with just metadata of the Git commit tree?

我想在 git 存储库中列出某些特定提交的文件名及其大小。

Git 是否将此数据与 git blob 对象一起存储在提交树中?

简短的回答是"No, but you don't (need to) care."

一棵树 object 有一个路径名组件——而不是通向该组件的目录路径,因为这由按顺序累积的一系列路径组件暗示首先到达树 object 和 blob 哈希,但不是 blob object 的大小。 blob object 的大小在 object 本身的前几个字节中,因为 所有 object 都以 [=25] 开头编码=] <typename, space, ASCII-fied size, NUL>.[=10= 形式的字节串]

但是,如果您可以阅读任何这些内容到此为止,我的意思是如果您有源代码可以提取足够的提交 object 来定位树 object s 并提取它们以便读取树和 blob ID 以及路径名——然后你就拥有了从 blob 中读取大小 header 所需的一切。如果您有足够的数据从存储库中读取树和 blob objects,那么您将拥有整个存储库,至少达到有趣的深度(您可能有一个浅表克隆,但它至少足够深以找到致力于找到树和斑点)。这意味着您可以通过遍历树 objects 找到路径名,并通过读取 blob headers.

找到 blob 大小