git log -G<regex> -p
es una herramienta maravillosa para buscar cambios en el historial de una base de código que coincidan con el patrón especificado. Sin embargo, puede ser abrumador localizar el trozo relevante en la salida diff / patch en un mar de trozos en su mayoría irrelevantes.
Por supuesto, es posible buscar la salida de git log
la cadena / expresión regular original, pero eso hace poco para reducir el ruido visual y la distracción de muchos cambios no relacionados.
Leyendo git log
, veo que está el --pickaxe-all
, que es exactamente lo contrario de lo que quiero: amplía la salida (a todo el conjunto de cambios), mientras que quiero limitarlo (al trozo específico).
Esencialmente, estoy buscando una manera de analizar "inteligentemente" el diff / patch en trozos individuales y luego ejecutar una búsqueda contra cada trozo (apuntando solo a las líneas cambiadas), descartar los trozos que no coinciden y generar los Esto hace.
¿Existe una herramienta como la que describo? ¿Existe un mejor enfoque para obtener los trozos emparejados / afectados?
Algunas investigaciones iniciales que he hecho ...
Si fuera posible
grep
la salida diff / patch y hacer que los valores de las opciones de contexto sean dinámicos, digamos, a través de expresiones regulares en lugar de recuentos de líneas, eso podría ser suficiente. Perogrep
no está exactamente construido de esa manera (ni necesariamente estoy solicitando esa función).Encontré la suite patchutils , que inicialmente sonaba como si pudiera satisfacer mis necesidades. Pero después de leer sus
man
páginas, las herramientas no parecen manejar trozos coincidentes basados en expresiones regulares. (Sin embargo, pueden aceptar una lista de trozos ...)Finalmente me encontré con splitpatch.rb , que parece manejar bien el análisis del parche, pero necesitaría un aumento significativo para manejar parches de lectura
stdin
, emparejar los trozos deseados y luego generar los trozos.