JGit 如何获取 DiffEntry 的 RevCommit 列表
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
没有'a list of RevCommit
s'。它表示对文件的单个更改,并描述是否添加、修改或删除了文件。提交不一定是更改的来源。
但是,您已经有了指向从中计算 DiffEntries 的提交的指针。是 master
和 release
。
使用ref.getObjectId()
你可以获得ref当前指向的提交的id。
要获得包含提交的所有元数据并指向其 树 的 RevCommit
,您需要像这样使用 RevWalk
:
try( RevWalk walk = new RevWalk( repository ) ) {
RevCommit commit = walk.parseCommit( master.getObjectId() );
}
有关 JGit 差异的更多信息 API 您可能需要阅读这篇文章 What’s the Difference? Creating Diffs with JGit
我使用 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
没有'a list of RevCommit
s'。它表示对文件的单个更改,并描述是否添加、修改或删除了文件。提交不一定是更改的来源。
但是,您已经有了指向从中计算 DiffEntries 的提交的指针。是 master
和 release
。
使用ref.getObjectId()
你可以获得ref当前指向的提交的id。
要获得包含提交的所有元数据并指向其 树 的 RevCommit
,您需要像这样使用 RevWalk
:
try( RevWalk walk = new RevWalk( repository ) ) {
RevCommit commit = walk.parseCommit( master.getObjectId() );
}
有关 JGit 差异的更多信息 API 您可能需要阅读这篇文章 What’s the Difference? Creating Diffs with JGit