2
votes

Commande Git pour obtenir la liste de tous les committers vers des fichiers contenant du texte spécifique

Quelle commande git obtient la liste de tous les committers vers des fichiers contenant du texte spécifique. Cela peut éventuellement inclure un paramètre avant / après. Le problème auquel je suis confronté est: y a-t-il une commande spécifique pour cela, ou puis-je obtenir la liste des fichiers et la diriger vers une commande?


1 commentaires

Clarifier séparément: je veux la liste de TOUS les committers aux fichiers contenant du texte spécifique, pas seulement ceux qui ont ajouté cette chaîne.


3 Réponses :


3
votes

probablement quelque chose du genre

git log --all -S "the string you search for" --pretty='%cn%n'

Détails:

-S les filtres commits en utilisant la chaîne donnée dans le paramètre suivant

% cn imprime le nom du validateur

% n est juste une nouvelle ligne


2 commentaires

Ce que je veux peut être divisé en deux étapes. Je peux réaliser les deux individuellement, mais pas ensemble. 1. Obtenez la liste des fichiers contenant la chaîne de recherche 2. Obtenez la liste des committers dans ces fichiers. La question est de combiner fondamentalement ces deux choses.


@GyanendraSingh Ok, c'est un peu plus complexe mais je vais l'examiner.



2
votes

Essayez cette commande pour git tous les noms et e-mails des committers pour les fichiers contenant du texte spécifique:

    git log -S "search string" --stat --pretty=format:"%cn -%ce (%cd)"


8 commentaires

Mais j'ai eu l'impression qu'OP ne connaissait pas les fichiers à rechercher, mais uniquement du texte spécifique dans des fichiers.


Si vous spécifiez un répertoire ou un nom de fichier, vous pouvez limiter la sortie du journal aux validations qui ont introduit une modification dans ces fichiers. C'est toujours la dernière option et est généralement précédée de doubles tirets (-) pour séparer les chemins des options.


Oui, mais le problème ici est que OP ne sait pas quels sont les fichiers avec lesquels filtrer, seulement des portions spécifiques de texte à l'intérieur.


J'ai ajouté un commentaire ci-dessus indiquant le problème que je veux résoudre, et ce n'est pas ça.


@NermeenSaleh cela fonctionne lorsque vous connaissez au préalable le "chemin des fichiers à rechercher". Dans mon cas, non. En outre, j'ai également besoin de la liste des auteurs de ce fichier.


@GyanendraSingh dans cette commande "git log -S" chaîne de recherche "--stat --pretty = format:"% cn -% ce (% cd) "Je ne spécifie aucun chemin


oui, mais cela n'ajoute pas la liste des personnes qui ont effectué des commits dans ces fichiers.


% cn -% ce récupère les noms et les e-mails des committers



2
votes

Faisons cela en deux étapes. Premièrement, obtenons la liste des fichiers:

git log --all --format='%an <%ae>' -- `git grep -l "search string"` | sort -u

Ayant la liste listons tous les commits qui touchent les fichiers, obtenons le nom / email de l'auteur pour chaque commit, trions la liste des auteurs en n'imprimant qu'un nom unique /email.

git log --format='%an <%ae>' -- $files | sort -u

Combinez deux commandes en une seule:

files=`git grep -l "searh string"`


3 commentaires

Je veux aussi avoir la liste des personnes qui se sont engagées dans ces fichiers, celles qui ont apporté d'autres modifications.


OK je vois. Faisons-le en 2 étapes - 1: obtenir la liste des fichiers et 2: obtenir la liste des commits qui touchent les fichiers.


@phd bravo, j'ai eu du mal à le trouver mais tu as été plus rapide. Devrait être la réponse acceptée.