Скрыть неизмененные строки при использовании git word-diff - PullRequest
0 голосов
/ 03 января 2019

У меня есть два файла, old.txt:

Line 1
Line 2
Line 3
Line4
Line5
Line 7
Line 7
Line 8

и new.txt:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8

Если я запускаю git diff --no-index --word-diff-regex=. old.txt new.txt, то это показывает, что единственными изменениями являются пробелыисправляет в строках 4 и 5 и исправляет неправильное число в строке 6:

diff --git a/old.txt b/new.txt
index be8495f..a982fdc 100644
--- a/old.txt
+++ b/new.txt
@@ -1,8 +1,8 @@
Line 1
Line 2
Line 3
Line{+ +}4
Line{+ +}5
Line [-7-]{+6+}
Line 7
Line 8

К сожалению, также отображаются неизмененные строки (от 1 до 3, 7 и 8), но это можно исправить, удалив строки контекстас --unified=0, например git diff --no-index --unified=0 --word-diff-regex=. old.txt new.txt:

diff --git a/old.txt b/new.txt
index be8495f..a982fdc 100644
--- a/old.txt
+++ b/new.txt
@@ -4,3 +4,3 @@ Line 3
Line{+ +}4
Line{+ +}5
Line [-7-]{+6+}

Однако в случае, когда регулярное выражение word-diff было настроено так, чтобы игнорировать различия в пробелах, например git diff --no-index --unified=0 --word-diff-regex="[^[:space:]]" old.txt new.txt, оно показывает:

diff --git a/old.txt b/new.txt
index be8495f..a982fdc 100644
--- a/old.txt
+++ b/new.txt
@@ -4,3 +4,3 @@ Line 3
Line 4
Line 5
Line [-7-]{+6+}

Обратите внимание, что строки 4 и 5 теперь не показывают изменений, но все же появляются в выходных данных.Это, вероятно, происходит потому, что в отличие от строк с 1 по 3 эти строки не полностью идентичны.

Однако есть ли опция git, чтобы не показывать строки, когда они не изменены в соответствии со словом-diff-regex?

Ответы [ 2 ]

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

В конце концов, я использовал grep, чтобы показывать только строки с изменениями, ища {+ и [-, используя выражение grep -E "\{\+|\[-", например,

git diff --no-index --unified=0 --word-diff-regex="[^[:space:]]" old.txt new.txt | grep -E "\{\+|\[-"

, которое выдает:

Line [-7-]{+6+}

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

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

Такой опции нет, но, вероятно, она должна быть. Как вы уже догадались, Git действительно выполняет построчную разность, а затем накладывает на результат директивы по буквам. Когда определение слова приводит к «без изменений», вы получаете то, что видели.

(В качестве альтернативы word-diff может использовать слова в качестве фактических символов, подаваемых во внутренний механизм сравнения. Но это приводит к гораздо большим входам, и алгоритм Майерса равен O (ND), поэтому при увеличении N и D оба значения увеличатся. использовать гораздо больше времени.)

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