фильтровать (git) вывод различий, чтобы содержать только строки, соответствующие шаблону

#git #diff #git-diff #jgit

#мерзавец #разница #git-diff #jgit

Вопрос:

Возможно ли с помощью diff / git (или другой распространенной утилиты) создавать различия, содержащие только изменения, соответствующие шаблону?

Например, у меня есть файл в двух разных версиях:

a/file.txt

 alpha
marker 100
omega
 

b/file.txt

 start
marker 200
end
 

Я хотел бы создать патч, который содержит только изменения в строках, содержащих marker строку (или другой шаблон регулярных выражений):

 diff --git a/file.txt b/file.txt
index eb27e64..fcc1676 100644
--- a/file.txt
    b/file.txt
@@ -1,3  1,3 @@
 alpha
-marker 100
 marker 200
 omega
 

(После применения такого исправления только изменения alpha-> start, omega-> end все еще будут ожидаться.)

Прямо сейчас у меня есть пользовательский линейный процессор с JGit, однако я очень недоволен своей реализацией, так как мне приходится вручную анализировать / разделять / рекомбинировать фрагменты и генерировать различия путем копирования / взлома JGit internal).

Поскольку это кажется распространенным вариантом использования, я бы ожидал, что какой-нибудь инструмент предоставит это «из коробки», но пока я ничего не нашел.

Обратите внимание, что использование таких вещей, как git diff -G'marker' или любой другой вид фильтрации фрагментов, недостаточно, так как сам фрагмент может быть произвольно больше (например, здесь есть только один фрагмент, содержащий все изменения файла).

Комментарии:

1. Вы можете установить размер контекста для фрагмента различий равным нулю, если вы не хотите смотреть на контекст. Однако обратите внимание, что -S и -G не смотрите на контекстную часть строк в первую очередь, поэтому я не уверен, в чем ваша проблема -G .