[英]JGit How get list of RevCommit for DiffEntry
我使用JGit获得两个分支之间的区别,如下所示:
ObjectReader reader = git.getRepository().newObjectReader();
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
Ref master = git.getRepository().exactRef(getRefBranchName( branchMaster) );
RevTree masterTree = new RevWalk(git.getRepository()).parseTree(master.getObjectId());
oldTreeIter.reset(reader, masterTree.getId());
Ref release = git.getRepository().exactRef(getRefBranchName( branchRelease));
RevTree releaseTree = new RevWalk(git.getRepository()).parseTree(release.getObjectId());
newTreeIter.reset(reader, releaseTree.getId());
List<DiffEntry> diffs = git.diff().setNewTree(newTreeIter).setOldTree(oldTreeIter).call();
然后,我可以按以下方式打印文件中的差异:
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DiffFormatter formatter = new DiffFormatter (outputStream);
formatter.setRepository(git.getRepository());
for (DiffEntry entry: diffs){
System.out.println("Diff Entry: " + entry + ", from: " + entry.getOldId()+", to: " + entry.getNewId());
formatter.format(entry);
String diffText = outputStream.toString("UTF-8");
System.out.println(diffText);
outputStream.reset();
}
我在该分支中看到了两个文件之间的所有差异,但是对于某些DiffEntry
我如何才能针对此差异获得所有提交? 我还没有找到方法
DiffEntry
没有“ RevCommit
的列表”。 它代表对文件的单个更改,并描述是添加,修改还是删除文件。 提交不一定一定是更改的源头。
但是,您已经具有指向从中计算DiffEntries的提交的指针。 它是master
和release
。
使用ref.getObjectId()
可以获得引用当前指向的提交的ID。
为了获得RevCommit
包含提交,并指出其树的所有元数据,您需要使用RevWalk
这样的:
try( RevWalk walk = new RevWalk( repository ) ) {
RevCommit commit = walk.parseCommit( master.getObjectId() );
}
有关JGit差异API的更多信息,您可能需要阅读这篇文章,有什么区别? 使用JGit创建差异
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.