При сравнении каталогов с diff есть ли способ исключить определенные различия файлов из вывода? - PullRequest
0 голосов
/ 06 мая 2019

Я запускаю эту команду:

diff --recursive a.git b.git

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

 ".xaml.g.cs"

, или строки, начинающиеся на:

 "Binary files"

, или строки, в которых есть этот текст:

".git/objects"

Ответы [ 2 ]

2 голосов
/ 06 мая 2019

Простой, но эффективный способ - передать вывод на grep. С grep -Ev вы можете игнорировать строки, используя регулярные выражения.

diff --recursive a.git b.git | grep -Ev "^< .xaml.g.cs|^> .xaml.g.cs"  | grep -Ev "Binary files$" | grep -v ".git/objects"

При этом игнорируются все строки с соответствующим текстом. Что касается регулярных выражений: ^ означает, что строка начинается с, $ означает, что строка заканчивается. Но по крайней мере для ^ вы должны настроить его на выход diff (где строки обычно начинаются с < или >).

Также обратите внимание, что diff предоставляет флаг --ignore-matching-lines=RE, но он может работать не так, как вы ожидаете, как , упомянутый в этом вопросе / ответе . И поскольку он не работает так, как я ожидаю, я скорее использую grep для фильтрации.

1 голос
/ 06 мая 2019
man diff

приводит следующие примеры:

   ...
   -x, --exclude=PAT
          exclude files that match PAT

   -X, --exclude-from=FILE
          exclude files that match any pattern in FILE
   ...

Вы пробовали использовать эти переключатели (например, diff -x=".xaml.g.cs" --recursive a.git b.git)?

...