git log -G<regex> -p
est un merveilleux outil pour rechercher dans l'historique d'une base de code les modifications qui correspondent au modèle spécifié. Cependant, il peut être écrasant de localiser le morceau approprié dans la sortie diff / patch dans une mer de mecs pour la plupart non pertinents.
Il est bien sûr possible de rechercher la sortie de git log
la chaîne / expression originale, mais cela ne fait pas grand-chose pour réduire le bruit visuel et la distraction de nombreux changements non liés.
En lisant la suite git log
, je vois qu'il y a le --pickaxe-all
, qui est l'exact opposé de ce que je veux: il élargit la sortie (à l'ensemble des modifications), alors que je veux le limiter (au morceau spécifique).
Essentiellement, je cherche un moyen d'analyser "intelligemment" le diff / patch en morceaux individuels, puis d'exécuter une recherche sur chaque morceau (en ciblant uniquement les lignes modifiées), de supprimer les morceaux qui ne correspondent pas et de sortir ceux qui font.
Existe-t-il un outil tel que je le décris? Existe-t-il une meilleure approche pour obtenir les mecs correspondants / affectés?
Quelques recherches initiales que j'ai faites ...
S'il était possible de faire
grep
la sortie diff / patch et de rendre les valeurs des options de contexte dynamiques - disons, via des regexps au lieu du nombre de lignes - cela pourrait suffire. Maisgrep
n'est pas exactement construit de cette façon (et je ne demande pas nécessairement cette fonctionnalité).J'ai trouvé la suite de patchutils , qui semblait initialement convenir à mes besoins. Mais après avoir lu ses
man
pages, les outils ne semblent pas gérer les mecs correspondants basés sur des expressions régulières. (Ils peuvent accepter une liste de mecs, cependant ...)J'ai finalement rencontré splitpatch.rb , qui semble bien gérer l'analyse du correctif, mais il devrait être considérablement augmenté pour gérer la lecture des correctifs via
stdin
, faire correspondre les morceaux souhaités, puis produire les morceaux.