0

背景:

我想从 Git 中的特定修订中检索文件。以前我使用git show此线程中描述的方法使用命令:如何从 Git 中的特定修订中检索单个文件?意义:

git show HEAD2:file.txt

但是,基于我在另一篇文章中解释的问题:Read both binary and text from process output我无法从git show的输出中读取二进制数据。在 SO 用户的建议下,我迁移到JGit作为 Java 的本机实现。我在 SO 上找到了这个线程,它描述了如何使用 JGit API 从特定修订版中检索文件。 如何在 JGit 中“cat”一个文件?

问题:

性能对我的项目非常重要。因此,我正在寻找检索文件的最佳方法。上面描述的 API 方法似乎在树中导航并获得正确的修订。考虑到我可以在 Git 中使用单个命令来检索文件,我不确定哪个更快。

  • 我应该使用为 JGit 描述的方法还是应该使用git show命令?
  • JGit有更好的解决方案吗?
4

2 回答 2

1

您可以使用

git checkout version -- path/to/file

此外,如果你想让它去别的地方,你可以

git --git-dir=.git --work-tree=somewhere/else checkout version -- path/to/file
于 2013-01-18T15:49:42.860 回答
1

嗯,知道哪个更快的唯一方法是在它们将被使用的情况下进行测量。其他一切都是猜测。

一般而言,从 Git 存储库中获取此信息所需的工作git show与 JGit 相同。它是这样的:

  1. 解析指定的 ref
  2. 检索底层提交对象 ID
  3. 解析它以获取树对象 ID
  4. 检索树对象并解析它(每个目录级别一次)以查找 blob 对象 ID
  5. 检索 blob 对象内容

有关更多详细信息,请参阅Pro Git 书籍中关于 Git 内部的章节

于 2013-01-18T16:47:56.160 回答