我在編程上使用JGit lib找到兩個提交之間的差異。diff如何在JGit中處理合並提交
假設我有以下承諾層次:
---1---2---3---4---5---6---7---8--
\--9-—10—-11--/
現在,讓我們說我分析diff進行提交4 - 7,如何將diff命令指的是合併在6? 它會保存與先前提交(4之前)相關的信息,例如2?
我用下面的代碼來確定進行比較:
private static List<DiffEntry> getDiffsBetweenCommits(String repositoryWorkDir, String fromCommit, String toCommit) {
List<DiffEntry> diffs = null;
try {
// Access GIT repository
File workDir = new File(repositoryWorkDir);
Git git = Git.open(workDir);
repository = git.getRepository();
// Locate commit references
ObjectId current = repository.resolve(toCommit + "^{tree}");
ObjectId previous = repository.resolve(fromCommit + "^{tree}");
// Generate tree iterators
ObjectReader reader = git.getRepository().newObjectReader();
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
oldTreeIter.reset(reader, previous);
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
newTreeIter.reset(reader, current);
// Calculate GIT differences
diffs = git.diff()
.setNewTree(newTreeIter)
.setOldTree(oldTreeIter)
.call();
} catch (Exception e) {
System.out.println("Error analyzing commit's diffs");
e.printStackTrace();
}
return diffs;
}
據我得到的文件中是遠遠超過4年長提交改變,我懷疑我得到他們,因爲合併的/重新塑造歷史,但我不太瞭解,所以我可以向自己解釋。
感謝您理解差異分析邏輯的幫助。