0

バックグラウンド:

Git の特定のリビジョンからファイルを取得したいと考えています。以前git showは、このスレッドで説明されている方法を使用してコマンドを使用しました: Git で特定のリビジョンから単一のファイルを取得する方法は? 意味:

git show HEAD2:file.txt

ただし、私の他の投稿で説明されている問題に基づいて:プロセス出力からバイナリとテキストの両方を読み取る の出力からバイナリ データを読み取ることができませんでしgit showた。SO ユーザーの提案に従って、Java のネイティブ実装としてJGitに移行しました。JGit APIを使用して特定のリビジョンからファイルを削除する方法を説明するSOのこのスレッドを見つけました。 JGitでファイルを「猫」にする方法は?

質問:

私のプロジェクトでは、パフォーマンスが非常に重要です。したがって、ファイルを取得する最良の方法を探しています。上記の 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 と JGit の間で同じです。こんなふうになります:

  1. 指定された参照を解析する
  2. 基になるコミット オブジェクト ID を取得する
  3. それを解析してツリー オブジェクト ID を取得します
  4. ツリー オブジェクトを取得して解析し (ディレクトリ レベルごとに 1 回)、BLOB オブジェクト ID を見つけます。
  5. BLOB オブジェクトのコンテンツを取得する

詳細については、Pro Git book の Git Internals に関する章を参照してください。

于 2013-01-18T16:47:56.160 に答える