我正在尝试使用 JGIT。 它工作得很好,但我还没有找到如何在 pull 之前在远程 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。
最佳答案
我发现了如何获取远程 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());
}
它显示了我想要的远程更改,但它的工作不正确。如果我在我的工作副本中创建一个新文件并提交该文件(不推送),那么差异会告诉我新文件已在 FETCH_HEAD 中删除。 我如何过滤这些虚假删除消息?
关于java - JGit 显示远程更改,如 git diff --name-status master origin/master,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22435714/