Git сохраняет снимки: при любых двух снимках по вашему выбору Git извлекает файлы, которые вы хотите сравнить 1 , во временную область 2 и затем запускает "diff engine" на двух файлах. Результатом этого движка является или должен быть ряд инструкций, которые при применении преобразуют файл левой стороны в файл правой стороны.
Git имеет несколько встроенных механизмов сравнения , который Git вызывает:
myers
: здесь используется алгоритм Юджина В. Майерса с некоторыми небольшими изменениями. Существуют многочисленные вопросы и ответы StackOverflow о разнице Майерса: Алгоритм различий Майерса против алгоритма Ханта-Макилроя ; Алгоритм различий? (несколько ответов, но несколько о разнице Майерса); Диффер Майерса: почему V [k - 1]
minimal
: то же самое как myers
, но без каких-либо изменений, сделанных для go быстрее, а не более минимальным, когда разделяющая часть разделяй и властвуй начинает работать плохо из-за очень длинных сценариев редактирования. В некотором смысле это настоящий алгоритм Майерса.
patience
: алгоритм Брэма Коэна; см. принятый ответ на Где найти алгоритм сравнения?
histogram
: модификация patience
, направленная на случайную синхронизацию с такими вещами, как скобки только строки.
Он также может запускать выбранный вами внешний механизм сравнения.
1 Или, по крайней мере, те, которые он хочет сравнивать. Если вы сравниваете файлы, которые на самом деле не находятся в коммитах, они могут быть уже извлечены.
2 Git в основном делает это в памяти, но при запуске внешнего diff действительно использовать временные файлы.