git log -G<regex> -p
ist ein wunderbares Werkzeug, um den Verlauf einer Codebasis nach Änderungen zu durchsuchen, die dem angegebenen Muster entsprechen. Es kann jedoch überwältigend sein, das relevante Stück in der Diff / Patch-Ausgabe in einem Meer von größtenteils irrelevanten Stücken zu lokalisieren.
Es ist natürlich möglich, die Ausgabe von git log
nach der ursprünglichen Zeichenfolge / Regex zu durchsuchen , aber dies trägt wenig dazu bei, das visuelle Rauschen und die Ablenkung vieler nicht zusammenhängender Änderungen zu verringern.
Beim Nachlesen git log
sehe ich --pickaxe-all
, dass es das genaue Gegenteil von dem gibt, was ich möchte: Es erweitert die Ausgabe (auf den gesamten Änderungssatz), während ich sie beschränken möchte (auf den bestimmten Teil).
Im Grunde bin ich auf der Suche nach einer Möglichkeit, das Diff / Patch "intelligent" in einzelne Hunks zu zerlegen und dann eine Suche für jeden Hunk durchzuführen (nur auf die geänderten Zeilen abzielen), die nicht übereinstimmenden Hunks zu verwerfen und die auszugeben das tun.
Gibt es ein Tool wie ich es beschreibe? Gibt es einen besseren Ansatz, um die passenden / betroffenen Kerle zu finden?
Erste Recherchen, die ich gemacht habe ...
Wenn es möglich wäre,
grep
die Diff- / Patch-Ausgabe zu ändern und die Kontextoptionswerte dynamisch zu gestalten, z. B. über reguläre Ausdrücke anstelle von Zeilenzahlen, könnte dies ausreichen. Istgrep
aber nicht genau so aufgebaut (und fordere diese Funktion auch nicht unbedingt an).Ich fand die Patchutils- Suite, die anfangs so klang, als würde sie meinen Bedürfnissen entsprechen. Nach dem Lesen der
man
Seiten scheinen die Tools jedoch keine passenden Hunks zu verarbeiten, die auf regulären Ausdrücken basieren. (Sie können jedoch eine Liste von Kerlen akzeptieren ...)Ich bin schließlich auf splitpatch.rb gestoßen , das das Parsen des Patches gut zu handhaben scheint, aber es müsste erheblich erweitert werden, um das Lesen von Patches über
stdin
, das Zuordnen gewünschter Hunks und das anschließende Ausgeben der Hunks zu handhaben .