Git& JGit:从特定修订版中检索文件的最快方法

时间:2013-01-18 15:33:02

标签: git version-control jgit

背景:

我想从Git中的特定版本中检索文件。以前我使用git show命令使用此线程中描述的方法:How to retrieve a single file from specific revision in Git?含义:

git show HEAD2:file.txt

但是,基于我在其他帖子中解释的问题:Read both binary and text from process output我无法从git show的输出中读取二进制数据。根据SO用户的建议,我转移到JGit作为Java的本机实现。我在SO上找到了这个线程,它描述了如何使用JGit API从特定版本中退出文件。 How to "cat" a file in JGit?

问题:

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用

git checkout version -- path/to/file

此外,如果你想让它去其他地方,你可以

git --git-dir=.git --work-tree=somewhere/else checkout version -- path/to/file

答案 1 :(得分:1)

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

对于通常从Git存储库中获取此信息所需的工作,git show和JGit之间的相同。它是这样的:

  1. 解析指定的引用
  2. 检索基础提交对象ID
  3. 解析它以获取树对象ID
  4. 检索树对象并解析它(每个目录级别一次)以查找blob对象ID
  5. 检索blob对象内容
  6. 有关详细信息,请参阅the chapter about Git Internals of the Pro Git book