我如何做相当于“git diff --name-status”的操作。用jgit? [英] How do I do the equivalent of "git diff --name-status" with jgit?

查看:843
本文介绍了我如何做相当于“git diff --name-status”的操作。用jgit?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获取修订版XXXXXX和HEAD之间已更改/添加/删除的文件列表。这就是我到目前为止:

I want to get a list of changed/added/deleted files between revision XXXXXX and HEAD. This is what I have so far:

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()所需的树?

Is this the right way to go about it and if so, how do I get the trees required for git.diff() ?

推荐答案

您可以通过调用获取HEAD和散列的树ID:

You can get the tree id for HEAD and the hash by calling:

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

和修订版ID:

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

获得树ID后,您可以创建树迭代器并获取差异:

Once you have the tree ids you can create the tree iterators and get the diffs:

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();

这篇关于我如何做相当于“git diff --name-status”的操作。用jgit?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆