我正在尝试使用JGIT。 它的工作非常好,但我还没有找到如何在拉动之前显示远程git上的更改。 在终端我通过以下步骤解决了我的问题:
git fetch
git diff --name-status master origin/master
如何使用JGit进行远程更改?有人有想法吗?
我认为线程How do I do the equivalent of "git diff --name-status" with jgit?可以提供帮助,但我不知道如何获取远程HEAD。
答案 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中删除了新文件。 如何过滤此错误删除消息?