【发布时间】:2015-04-20 13:03:16
【问题描述】:
我正在尝试列出所有远程发生的更改,而不计算本地所做的更改。在这个post 中,它演示了如何对远程进行差异,如下面的代码:
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,本地更改会被计算为“反向”远程更改。例如,如果我们在本地添加一个文件,它被计算为从远程删除,因为它不存在那里。同样,如果我在本地删除一个文件,它会被列为远程添加。 您如何忽略这种情况?其实这不完全是 jgit 的问题,如果你告诉我如何使用 git 命令,我可以自己找到 jgit 的方法......
编辑:三点是原始git中的解决方案,如下所示:
git diff --name-status HEAD...origin/master
现在我需要在 JGit 中表示这个命令。有什么建议吗?
【问题讨论】: