簡體   English   中英

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沒有“ RevCommit的列表”。 它代表對文件的單個更改,並描述是添加,修改還是刪除文件。 提交不一定一定是更改的源頭。

但是,您已經具有指向從中計算DiffEntries的提交的指針。 它是masterrelease

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM