У меня есть Java-программа и я хочу создать git-репозиторий для извлечения изменений сигнатур методов.Я хочу сравнить различия между записями в git и java.Поэтому я использовал этот код:
List<DiffEntry> diffs= git.diff()
.setNewTree(newTreeIter)
.setOldTree(oldTreeIter)
.call();
ByteArrayOutputStream out = new ByteArrayOutputStream();
DiffFormatter df = new DiffFormatter(out);
df.setRepository(git.getRepository());
for(DiffEntry diff : diffs)
{
df.format(diff);
diff.getOldId();
if(diff.getNewPath().endsWith(".java") && diff.getChangeType()== DiffEntry.ChangeType.MODIFY){
modifyItems=difN.getDiffs(diff.getOldId().name(),diff.getNewId().name());
}
Вот метод getDiff, который пытается сравнить два коммита на основе их идентификатора:
Repository repo = new FileRepository("xxx.git");
Git git = new Git(repo);
ObjectReader reader = git.getRepository().newObjectReader();
ObjectId headId = git.getRepository().resolve(headIdStr);
ObjectId oldId = git.getRepository().resolve(oldIdStr);
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
oldTreeIter.reset(reader, oldId);
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
newTreeIter.reset(reader, headId);
List<DiffEntry> diffs= git.diff()
.setNewTree(newTreeIter)
.setOldTree(oldTreeIter)
.call();
ByteArrayOutputStream out = new ByteArrayOutputStream();
DiffFormatter df = new DiffFormatter(out);
df.setRepository(git.getRepository());
for(DiffEntry diff : diffs)
{
df.format(diff);
diff.getOldId();
String diffText = out.toString("UTF-8");
out.reset();
}
return diffs;
Я пытаюсь сравнить этот коммит с егопредыдущий, но я не уверен, является ли этот код правильным или нет.кроме того, пока я запускаю этот код, эта ошибка происходит:
Exception in thread "main" org.eclipse.jgit.errors.IncorrectObjectTypeException: Object e973f7fea67fd355623e1df75b0c756004afa55f is not a tree.