JGitにはgit show
と直接的には対応していませんが、コマンドによって実装されるAPIが実装されています。
あなたが持っているものがすべてブランチのリファレンスであれば、まずそのヘッドコミットのツリーIDを解決する必要があります。幸いにも、Repository::resolve
が必要なツリーIDを返します式を受け付けます。
ObjectId masterTreeId = repository.resolve("refs/heads/master^{tree}");
は、ツリーIDを考えると、あなたは、目的のファイルの内容を保持しているブロブIDを取得するためにTreeWalk
を使用することができます。
TreeWalk treeWalk = TreeWalk.forPath(git.getRepository(), "readme", masterTreeId);
ObjectId blobId = treeWalk.getObjectId(0);
forPath
ファクトリメソッドはTreeWalk
を作成し、二番目の引数で指定されたパスでそれを配置します。
最後に、blob idを使用して、Gitのオブジェクトデータベースから内容を読み込むことができます。
ObjectReader objectReader = repository.newObjectReader();
ObjectLoader objectLoader = objectReader.open(blobId);
byte[] bytes = objectLoader.getBytes();
objectReader.close();
完全なソースコードはここで見つけることができます:Gitのオブジェクトデータベースの内部の仕組みの詳細についてはhttps://gist.github.com/rherrmann/0c682ea327862cb6847704acf90b1d5d
を、あなたはExplore Git Internals with the JGit APIを読むことをお勧めします。
https://stackoverflow.com/questions/10993634/how-do-i-do-git-show-sha1file-using-jgit – kan