Ваш первоначальный вопрос о бинарных файлах, что в Git означает "файлы, которые, как решил Git, не являются текстовыми". Для таких файлов, если вы не предоставите специальный драйвер diff, Git не будет пытаться сгенерировать diff, он только скажет «эти два файла одинаковы» или «эти два файла отличаются». (Драйвер diff - это внешняя программа: вы можете указать Git запустить эту программу, и эта программа может делать все, что он хочет сделать с парой файлов, чтобы сгенерировать полезный diff.)
Ваш обновленный вопрос, по крайней мере, на этот раз, касается различий текстовых файлов. Git встроил в него модифицированную версию LibXDiff . Основной алгоритм здесь принадлежит Юджину Майерсу . См. Также Алгоритм сравнения Майерса и алгоритм Ханта – Макилроя . Более удобное введение в алгоритмы сравнения см. В последнем разделе главы 3 моей книги, застопорившейся * . На самом деле вы знакомы с идеей строковых хэшей: эти алгоритмы сравнения сравнивают символов , и использование строчного хэша в качестве символов в матрице различий - это то, как они находят построчную разность.