git diff показывает ту же строку, что и удаленная, и добавленная

Я случайно работал на мастере, где мне пришлось открывать новую ветку.

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

index 4a9abb8..7c55879 100755
--- a/includes/site.inc.php
+++ b/includes/site.inc.php
@@ -142,11 +142,11 @@ class site{

        public $tplEngine = 'smarty';

-
+       
     private $_productsByType = array();
     private $logger;
-    protected $locale = 'tr_TR';
-
+    protected $locale = 'tr_TR';  
+    

Пишет, что я удалил и добавил одно и то же, разницы с исходным индексом в принципе нет и я не хочу, чтобы этот файл воспринимался как измененный.

Что я должен делать ? Спасибо.


person Pumpkin    schedule 12.07.2012    source источник
comment
Новый git diff -B (git diff --ignore-blank-lines) также может быть интересен в вашем случае (git1.8.4+). См. мой ответ ниже.   -  person VonC    schedule 07.07.2013


Ответы (8)


Проверьте пробелы. В замененных «пустых» строках есть пробелы. Возможно, вы также случайно заменили табуляцию пробелами или наоборот.

person jpe    schedule 12.07.2012

Это, вероятно, изменения пробелов. Вы можете запустить git diff -w, который будет игнорировать любые изменения пробелов.

person mamapitufo    schedule 12.07.2012

В дополнение к пробелам/табуляциям, окончания строк при вводе из разных редакторов (даже в Windows) и/или разных ОС могут способствовать тому, что строки diff отображают дубликаты; LF (linux/Unix) и CRLF (Windows).

person MKM    schedule 09.12.2016

Проверьте наличие пробелов или различий в окончании строки.

person carlspring    schedule 12.07.2012

Вторая версия непустой строки имеет пробел после точки с запятой, а пустые строки также имеют разное количество пробелов.

Должна быть возможность, чтобы git выделял такие скрытые пробелы, чтобы различия были более информативными, но у меня нет под рукой руководства.

person Kevin Reid    schedule 12.07.2012

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

git difftool

после указания, например, vimdiff в качестве вашего difftool через git config --global diff.tool vimdiff может помочь.

person dgruending    schedule 16.01.2020

Обратите внимание, что git 1.8.4 (июль 2013 г. ) больше не будет показывать вам изменения только с пустыми строками, если вы используете новую опцию -B.

«git diff» изучил режим, который игнорирует фрагменты, изменение которых состоит только из добавления и удаления пустых строк, что аналогично «diff -B» (игнорировать пустые строки) GNU diff.

См. commit 36617af7ed594d1928554356d809bd611c642dd2:

Цель исправления состоит в том, чтобы максимально точно представить различия GNU -B/--ignore-blank-lines. Короткий вариант недоступен, так как он уже используется для "break-rewrites".

Когда эта опция используется, git diff не будет создавать ханки, которые просто добавляют или удаляют пустые строки, но по-прежнему будет показывать добавление/подавление пустых строк, если они достаточно близки к «ценным» изменениям.

вот более подробное описание опции:

  • реальные изменения интересны
  • пустые строки, которые достаточно близки (меньше размера контекста) к интересным изменениям, считаются интересными (рекурсивное определение)
  • Линии «контекста» используются вокруг каждой части интересных изменений.
  • Если два фрагмента разделены меньше, чем «контекст между фрагментами», они будут объединены в один.
person VonC    schedule 07.07.2013

Иногда это может происходить из-за того, что алгоритм сравнения по умолчанию, используемый git, использует эвристику для исключения дорогостоящих пограничных случаев, что может привести к неоптимальным результатам.

Я столкнулся с идентичной этой проблемой, которую не мог объяснить из-за пробелов, окончаний строк и т. д. git diff показывал определенную строку, которая была удалена, а затем повторно добавлена ​​как часть блока, который отображался как удаленные 3 строки и добавлено 2 строки, но на самом деле было удалено 2 строки и добавлена ​​1 строка. Другие программы сравнения показали ожидаемые 2 удаленные строки и 1 добавленную строку.

Файл, в котором это произошло, состоял из 4736 строк (114 КБ), с общим количеством различий 640 вставок и 1340 удалений, причем рассматриваемый фрагмент находился в середине файла. Я не смог свести его к меньшему тестовому примеру, в котором обнаружилась та же проблема: малейшие возмущения в любом месте приводили к исчезновению проблемы. Мой единственный вывод состоит в том, что я попал в один из этих крайних случаев эвристики алгоритма сравнения.

Git поддерживает множество других алгоритмов сравнения, помимо стандартного. Переключив алгоритм на любой из minimal, patience или histogram, моя проблема в этом случае исчезла.

См. также этот комментарий в исходном коде git, из встроенной библиотеки LibXDiff.

person Adam Rosenfield    schedule 22.10.2019