git log -G<regex> -p
è uno strumento meraviglioso per cercare nella cronologia di una base di codice le modifiche che corrispondono allo schema specificato. Tuttavia, può essere schiacciante individuare l'hunk rilevante nell'output diff / patch in un mare di hunk per lo più irrilevanti.
Naturalmente è possibile cercare l'output della git log
stringa / regex originale, ma ciò fa ben poco per ridurre il rumore visivo e la distrazione di molte modifiche non correlate.
Continuando a leggere git log
, vedo --pickaxe-all
che c'è l'esatto contrario di quello che voglio: allarga l'output (all'intero changeset), mentre io voglio limitarlo (allo specifico hunk).
In sostanza, sto cercando un modo per analizzare "in modo intelligente" il diff / patch in singoli hunk e quindi eseguire una ricerca su ogni hunk (indirizzando solo le linee modificate), scartare gli hunk che non corrispondono e produrre quelli quello fa.
Esiste uno strumento come quello che descrivo? Esiste un approccio migliore per ottenere gli hunk abbinati / interessati?
Alcune ricerche iniziali che ho fatto ...
Se fosse possibile
grep
l'output diff / patch e rendere dinamici i valori delle opzioni di contesto, ad esempio tramite regexps anziché il conteggio delle righe, ciò potrebbe essere sufficiente. Magrep
non è esattamente costruito in questo modo (né sto necessariamente richiedendo quella funzione).Ho trovato la suite patchutils , che inizialmente sembrava che potesse soddisfare le mie esigenze. Ma dopo aver letto le sue
man
pagine, gli strumenti non sembrano gestire hunk corrispondenti basati su regexps. (Possono accettare un elenco di hunk, però ...)Alla fine mi sono imbattuto in splitpatch.rb , che sembra gestire bene l'analisi della patch, ma avrebbe bisogno di essere aumentato in modo significativo per gestire la lettura delle patch
stdin
, abbinando gli hunk desiderati e quindi emettendo gli hunk.