2016-10-11 248 views
0

我得到使用JGit兩個分支之間的區別如下:JGit如何獲得RevCommit的名單DiffEntry

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?我還沒有找到辦法做到這一點

回答

0

A DiffEntry沒有'的列表RevCommit s'。它代表對文件的單個更改並描述文件是否被添加,修改或刪除。一個承諾不一定是變化的根源。

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

With ref.getObjectId()您可以獲取ref當前指向的提交ID。

要獲得RevCommit包含提交和指向它的所有元數據,您需要使用RevWalk這樣的:

try(RevWalk walk = new RevWalk(repository)) { 
    RevCommit commit = walk.parseCommit(master.getObjectId()); 
}  

約JGit的差異API欲瞭解更多,你可能需要閱讀thje文章What’s the Difference? Creating Diffs with JGit

+0

感謝您的幫助 – Evens