Как получить список измененных файлов для фиксации с помощью JGit

Я хочу получить измененные файлы между двумя фиксациями, а не информацию о различиях, как я могу использовать JGit для этого?


person Allen Abner    schedule 04.11.2020    source источник
comment
Я думаю, что здесь уже был дан ответ: stackoverflow.com/questions/28785364/   -  person Rüdiger Herrmann    schedule 04.11.2020
comment
Отвечает ли это на ваш вопрос? Список файлов, измененных между фиксациями с помощью JGit   -  person Rüdiger Herrmann    schedule 04.11.2020


Ответы (1)


С двумя ссылками, указывающими на два коммита, достаточно сделать следующее, чтобы повторить все изменения между коммитами:

        ObjectId oldHead = repository.resolve("HEAD^^^^{tree}");
        ObjectId head = repository.resolve("HEAD^{tree}");

        // prepare the two iterators to compute the diff between
        try (ObjectReader reader = repository.newObjectReader()) {
            CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
            oldTreeIter.reset(reader, oldHead);
            CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
            newTreeIter.reset(reader, head);

            // finally get the list of changed files
            try (Git git = new Git(repository)) {
                List<DiffEntry> diffs= git.diff()
                                    .setNewTree(newTreeIter)
                                    .setOldTree(oldTreeIter)
                                    .call();
                for (DiffEntry entry : diffs) {
                    System.out.println("Entry: " + entry);
                }
            }
        }
    }

В jgit-cookbook

person centic    schedule 04.11.2020
comment
Однако DiffEntry может предоставлять только такую ​​информацию, как newPath и oldPath. Как я могу использовать пути или другую возможную информацию, предоставленную DiffEntry, чтобы изменить файлы? - person Allen Abner; 06.11.2020
comment
Не уверен, что вы имеете в виду под отсутствием измененных файлов. Вы получаете новый/старый путь как часть DiffEntry. Для неходов он будет одинаковым как для старого, так и для нового, так что для простых модификаций либо будет ваш путь - person centic; 06.11.2020