#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
.