git log -G<regex> -p
замечательный инструмент для поиска в истории кодовой базы изменений, соответствующих указанному шаблону. Тем не менее, это может быть огромным, чтобы найти соответствующий кусок в diff / patch патч в море в основном нерелевантных блоков.
Конечно, можно искать в git log
исходной строке / регулярном выражении вывод , но это мало что делает для уменьшения визуального шума и отвлечения многих несвязанных изменений.
Читая дальше git log
, я вижу --pickaxe-all
, что есть полная противоположность того, что я хочу: он расширяет вывод (до всего набора изменений), тогда как я хочу ограничить его (до конкретного блока).
По сути, я ищу способ «интеллектуально» разбить diff / patch на отдельные фрагменты, а затем выполнить поиск по каждому блоку (нацеливаясь только на измененные строки), отбросить фрагменты, которые не совпадают, и вывести те что делать.
Существует ли такой инструмент, как я описываю? Есть ли лучший подход, чтобы получить согласованные / затронутые фрагменты?
Некоторое начальное исследование, которое я сделал ...
Если бы это было возможно для
grep
diff / patch и сделать значения параметров контекста динамическими, скажем, с помощью регулярных выражений вместо количества строк, этого могло бы быть достаточно. Ноgrep
не совсем так (и я не обязательно запрашиваю эту функцию).Я нашел пакет patchutils , который поначалу звучал так, как будто бы он соответствовал моим потребностям. Но после прочтения его
man
страниц инструменты не обрабатывают подходящие фрагменты, основанные на регулярных выражениях. (Хотя они могут принять список хуков ...)В конце концов я наткнулся на splitpatch.rb , который, кажется, хорошо справляется с разбором патча, но его нужно значительно расширить, чтобы обрабатывать чтение патчей
stdin
, сопоставлять нужные фрагменты, а затем выводить фрагменты.