Как git создает diff в файлах? - PullRequest
0 голосов
/ 09 января 2019

Какой механизм использует git при diff загрузке файлов? Как git может сказать мне разницу между двумя файлами (два коммита и т. Д.)? Использует ли он какой-либо механизм пары ключ-значение, в котором номер строки является ключом, а значение - хешем, а если хэш изменяется, строка помечается как измененная строка?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Ваш первоначальный вопрос о бинарных файлах, что в Git означает "файлы, которые, как решил Git, не являются текстовыми". Для таких файлов, если вы не предоставите специальный драйвер diff, Git не будет пытаться сгенерировать diff, он только скажет «эти два файла одинаковы» или «эти два файла отличаются». (Драйвер diff - это внешняя программа: вы можете указать Git запустить эту программу, и эта программа может делать все, что он хочет сделать с парой файлов, чтобы сгенерировать полезный diff.)

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

0 голосов
/ 09 января 2019

Вероятно, он генерирует контрольную сумму файла и сравнивает их, если они отличаются, файл будет помечен как измененный, но он не будет сообщать вам разницу, потому что просто не знает об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...