Как git diff показывает, была ли строка изменена или добавлена? - PullRequest
1 голос
/ 06 января 2020

Учитывая два файла, как git diff или какой-либо другой инструмент сравнения сообщают, какие строки были добавлены, изменены или удалены?

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

РЕДАКТИРОВАТЬ: Этот вопрос больше касается фактического метода, как происходит дифференцирование

Ответы [ 2 ]

2 голосов
/ 06 января 2020

Git сохраняет снимки: при любых двух снимках по вашему выбору Git извлекает файлы, которые вы хотите сравнить 1 , во временную область 2 и затем запускает "diff engine" на двух файлах. Результатом этого движка является или должен быть ряд инструкций, которые при применении преобразуют файл левой стороны в файл правой стороны.

Git имеет несколько встроенных механизмов сравнения , который Git вызывает:

Он также может запускать выбранный вами внешний механизм сравнения.


1 Или, по крайней мере, те, которые он хочет сравнивать. Если вы сравниваете файлы, которые на самом деле не находятся в коммитах, они могут быть уже извлечены.

2 Git в основном делает это в памяти, но при запуске внешнего diff действительно использовать временные файлы.

0 голосов
/ 06 января 2020

git сохраняет текущую подтвержденную версию каждого отдельного файла в репо. Если файл изменен, генерируемая версия генерируется и сравнивается с текущей версией вашего файла. Это то же самое, что и разложение двух файлов на жестком диске. Если инструмент diff может различать два обычных файла, он может различать версию, созданную git, и версию, которая у вас есть.

Если нет какой-то действительно неясной ошибки, инструмент diff должен уметь распознавать любые различия, так как инструмент diff сравнивает два файла строка за строкой.

...