如何使用 Libgit2sharp 确定文件是否为二进制文件?

How to use Libgit2sharp to determine if a file is binary?

我想确定一个文件(来自某个 commit/revision)是否为二进制文件。我知道 git 有某种方法可以做到这一点,因为当你比较一个二进制文件时,它会给你一个不同的结果,然后比较一个普通的文本文件。知道这一点后,我在网上看到了关于将文件与空树分支进行差异比较以确定它是否为二进制文件的帖子。如果文件是二进制文件,它将在差异行号所在的位置显示两条破折号。

例如:

git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 --numstat HEAD -- logo.png

将return

-       -       logo.png

有破折号是因为该文件是二进制文件。常规文本文件将显示行差异。

我想使用这个事实来使用 Libgit2sharp 检测文件是否为二进制文件,但我不知道该怎么做。

我也愿意接受任何替代方法,如果这个方法太迂回的话。

libgit2 为 blob 和缓冲区提供了这种启发式方法。由于您要处理的是一个 blob,您可以查询表示该对象的 Blob 对象的 IsBinary 属性。

如果您需要 Blob 对象,您可以使用存储库的 RevParse 方法查找修订以获取 GitObject 实例,然后对其调用 Peel 将其转换为 Blob。