在 Java 中有效地获取 git blob 大小

问题描述

我有一堆对象 ID,它们指的是给定 git 存储库中的 blob。我想获取未压缩内容占用的字节数,最好使用 JGit。即,一旦在工作区中检出,相应文件将包含的字节数。

此信息是否存储在 git blob 本身中?对其进行了简要讨论 here,但我不明白 blob 标头中的 blob 大小是否对应于膨胀后的大小,或其他内容(例如存储增量所需的大小)。

我可以通过 JGit 访问 blob 大小:给定一个 FileRepository repository 并一劳永逸地初始化一个 ObjectLoader reader = repository.newObjectReader(),看来我寻求的大小可以使用 reader.open(objectId).getSize() 获得。但这很慢。通常需要几十毫秒才能获得一个 blob 大小。如果我理解正确,JGit 至少在某些情况下会读取整个 blob。 (我问了一个类似的问题 here,但没有得到答复。)

我的问题是:我可以使用 JGit 更快地获得 blob 大小吗?或者,我是否可以通过读取 blob 数据的某些部分来至少在原则上实现我想要的东西,也就是说,这些信息是以直接形式存储在某处还是可推论的,或者我是否绝对需要在知道之前阅读和膨胀整个 blob它的大小?

解决方法

使用 ObjectReader#getObjectSize,它只会读取对象的大小,而不是整个对象。

open对象会将其全部加载到内存中,这是不必要的。