JGit显示远程更改,如git diff --name-status master origin / master

时间:2014-03-16 10:29:25

标签: java git jgit

我正在尝试使用JGIT。 它的工作非常好,但我还没有找到如何在拉动之前显示远程git上的更改。 在终端我通过以下步骤解决了我的问题:

  1. git fetch

  2. git diff --name-status master origin/master

  3. 如何使用JGit进行远程更改?有人有想法吗?

    我认为线程How do I do the equivalent of "git diff --name-status" with jgit?可以提供帮助,但我不知道如何获取远程HEAD。

1 个答案:

答案 0 :(得分:2)

我发现了如何获得远程HEAD(FETCH_HEAD)。 现在我的代码如下:

git.fetch().call();
Repository repo = git.getRepository();      
ObjectId fetchHead = repo.resolve("FETCH_HEAD^{tree}");
ObjectId head = repo.resolve("HEAD^{tree}");

ObjectReader reader = repo.newObjectReader();
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
oldTreeIter.reset(reader, head);
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
newTreeIter.reset(reader, fetchHead);
List<DiffEntry> diffs= git.diff().setShowNameAndStatusOnly(true)
                        .setNewTree(newTreeIter)
                        .setOldTree(oldTreeIter)
                        .call();
for(DiffEntry entry : diffs) {
    System.out.println(entry.toString());
}

它向我显示了我想要的远程更改,但它工作不正确。如果我在工作副本中创建一个新文件并提交文件(不推送),那么diff会告诉我在FETCH_HEAD中删除了新文件。 如何过滤此错误删除消息?