git diff игнорировать переводы строки - PullRequest
0 голосов
/ 30 марта 2020

Я использую:

git diff --ignore-space-at-eol -b -w --ignore-blank-lines --ignore-cr-at-eol COMMIT1 COMMIT2

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

- <div class="model-content" style="border: 2px solid #d5001e;border-radius: 8px;">
- <div class="model-header" style="border-bottom: 1px solid #d5001e;background: #d5001c;">
+ <div class="model-content"
+     style="border: 2px solid #d5001e;border-radius: 8px;">
+     <div class="model-header"
+         style="border-bottom: 1px solid #d5001e;background: #d5001c;">

Вопрос : как заставить git diff игнорировать эти новые строки?

1 Ответ

1 голос
/ 30 марта 2020

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

Использование слова Git -diff, вы можете обработать вывод алгоритма так, чтобы игнорировать переводы строки. Результат довольно прикольный, потому что, если фактическое изменение влияет на нет слов, вы получите заголовок diff, за которым следует блок без изменений (!). Однако для вашего примера это не совсем помогает.


1 Технически, здесь происходит то, что Git рассматривает каждую входную строку как один символ. Затем он запускает выбранный алгоритм, обычно Майерс, над символами . Так как линии были разделены и стали отдельными символами, в вашем конкретном примере здесь есть один символ с левой стороны от ввода, который становится двумя различными символами с правой стороны для каждой из двух исходных <div ...> строк.

Подробнее об этом см. На страницах 60–66 прототипа моей книги .

.
...