8

リビジョン XXXXXX と HEAD の間で変更/追加/削除されたファイルのリストを取得したい。これは私がこれまでに持っているものです:

String oldHash = "a97e5553e37a25bd1a3c99eab303145baed08dbd";
Git git = Git.open(new File("/tmp/jgit"));
Repository repository = git.getRepository();
ObjectId old = repository.resolve(oldHash);
ObjectId head = repository.resolve("HEAD");

// how do i get the trees from the obj. id?
List<<DiffEntry> diffs = git.diff().setNewTree(null).setOldTree(null).call();

for(DiffEntry diff : diffs) {
    // do stuff
}

これは正しい方法ですか?もしそうなら、 git.diff() に必要なツリーを取得するにはどうすればよいですか?

4

1 に答える 1

10

次のコマンドを呼び出すことで、HEADのツリーIDとハッシュを取得できます。

ObjectId head = repository.resolve("HEAD^{tree}");

リビジョンIDの場合:

ObjectId old = repository.resolve(oldHash + "^{tree}");

ツリーIDを取得したら、ツリーイテレータを作成してdiffを取得できます。

ObjectReader reader = repository.newObjectReader();
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
oldTreeIter.reset(reader, oldId);
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
newTreeIter.reset(reader, headId);
List<DiffEntry> diffs= git.diff()
                        .setNewTree(newTreeIter)
                        .setOldTree(oldTreeIter)
                        .call();
于 2011-12-19T23:17:46.987 に答える