JGitライブラリを使用して2つのコミット間の差分をプログラムで検索しようとしています。diffはJGitでマージコミットを処理します
は、私は、次の階層をコミット持っていると仮定します - diffコマンドは6で、マージを参照するか、7
---1---2---3---4---5---6---7---8--
\--9-—10—-11--/
今度は、私は4をコミット間の差分を解析してると言ってみましょうか? 以前のコミット(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よりもはるかに古いコミットで変更されたファイルを取得しています、と私は私が原因マージのそれらを得ることを疑います私はそれを自分自身に説明することができるでしょう。
diff解析ロジックを理解していただきありがとうございます。