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

标签 java git jgit

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

  1. git fetch

  2. 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/

相关文章:

java - HTML 表单 Action Java

git - 为什么 git 会找到我的主目录中不存在的目录?

git - 删除 jgit 未按预期工作的分支

java - 连接多个命令

java - 从 Java 数组列表中删除学生时出错

Java 和 MySql : Console adds '@' %' to db username

git - 为什么复制笔记时存储库大小会翻倍?

git - 我们如何在 git 中 merge 两个存储而不提交任何存储?

java - 如何在 JGit 中从一个 git 分支硬重置到另一个分支?

eclipse - 为什么不建议将 Eclipse 项目文件夹作为 Git 存储库?