Git diff видит весь файл как измененный, когда он не

Механизм git diff видит весь файл, который был изменен, когда он этого не сделал. Например, возьмите эту фиксацию: https://github.com/etiago/phpvirtualbox/commit/626e09958384f479f94011ac3b8301bd497aec51

Здесь мы видим, что файл lib/vboxconnector.php имеет 2807 дополнений и 2778 удалений. Кроме того, начиная с выполнения ручного git diff, я считаю, что весь файл берется как удаление (помечено минусом), а в качестве дополнения используется целый новый файл. Тем не менее, файлы имеют много общего, что git просто игнорируется.

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

Кроме того, беря две коммиты файла (тот, что в 626e09958384f479f94011ac3b8301bd497aec51 и 626e09958384f479f94011ac3b8301bd497aec51^1) и разграничивает их с помощью Meld, я получаю правильный анализ diff.

Я загрузил две записи файла в мой Dropbox для удобства: commit_1 commit_2.

Ответы

Ответ 1

В vboxconnector.php_1 каждая строка заканчивается последовательностью CR LF.

В vboxconnector.php_2 каждая строка заканчивается просто LF.

Таким образом, каждая строка файла изменилась.

Попробуйте использовать git diff --ignore-space-at-eol.

Вы также можете найти полезную информацию в ответах на этот вопрос.