À l'aide de git gui blame
est difficile de faire usage de scripts, et, alors que l' git log -G
et git log --pickaxe
peuvent vous montrer lors de la définition de la méthode est apparue ou a disparu, je n'ai trouvé aucun moyen de faire la liste de toutes les modifications apportées à l'organisme de votre méthode.
Toutefois, vous pouvez utiliser gitattributes
et de la textconv
de la propriété à une solution qui ne fait que cela. Bien que ces caractéristiques ont été à l'origine destiné à vous aider à travailler avec les fichiers binaires, ils fonctionnent tout aussi bien ici.
La clé est d'avoir Git supprimer à partir du fichier de toutes les lignes sauf celles qui vous intéressent, avant de faire toute la diff des opérations. Ensuite, git log
, git diff
, etc. ne peut voir que la zone qui vous intéresse.
Voici les grandes lignes de ce que je fais dans une autre langue; vous pouvez l'adapter à vos propres besoins.
-
Écrire un petit script (ou un autre programme) qui prend un argument, à savoir le nom d'un fichier source -- et sorties uniquement la partie intéressante de ce fichier (ou rien si rien de tout cela est intéressant). Par exemple, vous pouvez utiliser sed
comme suit:
#!/bin/sh
sed -n -e '/^int my_func(/,/^}/ p' "$1"
-
Définir un Git textconv
filtre pour votre nouveau script. (Voir l' gitattributes
page de manuel pour plus de détails.) Le nom du filtre et de l'emplacement de la commande peut être quelque chose que vous aimez.
$ git config diff.my_filter.textconv /path/to/my_script
-
Indiquer à Git pour utiliser ce filtre avant de calculer les diffs pour le fichier en question.
$ echo "my_file diff=my_filter" >> .gitattributes
-
Maintenant, si vous utilisez -G.
(note de l' .
) à la liste de tous les commits qui produisent des changements visibles lorsque votre filtre est appliqué, vous aurez exactement les commits qui vous intéresse. Toutes les autres options que l'utilisation de Git est diff routines, comme --patch
, sera également obtenir cette vue restreinte.
$ git log -G. --patch my_file
Voilà!
Une amélioration utile que vous pourriez faire est d'avoir votre filtre script de prendre un nom de méthode en tant que premier argument (et le fichier pour la seconde). Ceci vous permet de spécifier une nouvelle méthode de d'intérêt, en appelant git config
, plutôt que d'avoir à modifier votre script. Par exemple, vous pourriez dire:
$ git config diff.my_filter.textconv "/path/to/my_command other_func"
Bien sûr, le filtre script peut faire ce que vous voulez, prendre plus d'arguments, ou quoi que ce soit: il y a beaucoup de flexibilité au-delà de ce que j'ai montré ici.