jgit IncorrectObjectTypeException при сравнении фиксирует - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...