Git - это общий инструмент. Он не понимает ваш исходный язык (в данном случае Java, но что если ваш исходный язык был бы вместо Swift или Python или C ++ или TypeScript или, ну, что еще вы можете придумать?). Он просто понимает «строки текста» и имеет простые (а иногда и не очень простые) регулярные выражения для распознавания функции / метода / класса / других подобных определений, для аннотирования различий. 1
Чтобы получить желаемый результат, вам нужен инструмент, который понимает язык, о котором идет речь.
Учитывая такой инструмент, вы дадите ему:
- более старая версия (коммит или файл из этого коммита) и
- более новая версия (другой коммит или "тот же" файл из этого коммита).
Затем он должен прочитать файлы этих двух коммитов, выяснить, какие методы у вас есть, и произвести любой анализ, который вам нравится.
Что нужно этому инструменту из Git - это два версия . Когда и может ли он обрабатывать только два файла или требуется два полных снимка, зависит от этого инструмента.
Команда git difftool
может быть полезной или полезной для вызова этого другой инструмент. Что делает git difftool
, так это сравнивает две полные фиксации, а затем для каждого отличающегося файла передает старую и новую версии этих файлов другому инструменту. Вы выбираете этот второй инструмент из любого инструмента на вашем компьютере, где угодно. Git просто вызывает этот инструмент на паре файлов, извлеченных из пары коммитов. Если это делает то, что вам нужно, теперь вы сделали. Если нет, вам может потребоваться еще несколько шагов: например, вы можете запустить git diff --raw <commit1> <commit2>
и проанализировать его вывод, или просто git checkout
каждый из двух коммитов в некоторые временные местоположения (используя временный индекс для каждого) и работать оттуда.
1 Обратите внимание, что регулярные выражения не способны к правильному анализу; большинство реальных языков требуют грамматики. Смотрите, например, Регулярное выражение против. Разбор строки . Правильное обсуждение CS-теоремы c войдет в Автоматы конечного состояния , но в StackOverflow обычно не работает topi c.