Dans un référentiel de code Git, je veux répertorier toutes les validations qui contiennent un certain mot. J'ai essayé
git log -p | grep --context=4 "word"
mais cela ne me rend pas nécessairement le nom du fichier (à moins qu'il ne soit à moins de 5 lignes du mot que j'ai recherché. J'ai aussi essayé
git grep "word"
mais cela ne me donne que les fichiers présents et non l'historique.
Comment puis-je rechercher tout l'historique afin de pouvoir suivre les changements sur un mot particulier? J'ai l'intention de rechercher dans ma base de code des occurrences de mots pour suivre les modifications (recherche dans l'historique des fichiers).
Réponses:
Si vous souhaitez trouver toutes les validations où le message de validation contient un mot donné, utilisez
Si vous voulez trouver toutes les validations où "mot" a été ajouté ou supprimé dans le contenu du fichier (pour être plus précis: où le nombre d'occurrences de "mot" a changé), c'est-à-dire rechercher le contenu de la validation , utilisez la recherche dite "pioche" avec
Dans git moderne il y a aussi
pour rechercher les différences dont la ligne ajoutée ou supprimée correspond à "word" (également valider le contenu ).
Notez que
-G
par défaut accepte une regex, tandis que-S
accepte une chaîne, mais peut être modifié pour accepter les regex en utilisant le--pickaxe-regex
.Avec Git 2.25.1 (février 2020), la documentation est clarifiée autour de ces expressions régulières.
Voir commit 9299f84 (06 fév 2020) de Martin Ågren (``) .
(Fusionné par Junio C Hamano -
gitster
- en commit 0d11410 , 12 fév 2020)La
git diff
documentation comprend désormais:la source
-S<string>
Recherchez les différences qui introduisent ou suppriment une instance de <string>.-G<string>
Recherchez les différences dont la ligne ajoutée ou supprimée correspond à la <regex> donnée.-S<string>
c'est plus rapide car il vérifie seulement si le nombre d'occurrences a<string>
changé, tandis que les-G<string>
recherches ont ajouté et supprimé des lignes dans chaque diff de validation.git log --grep="my words"
,.--grep
est différent de-S
et-G
. Vous pouvez citer la chaîne à chacun de ces arguments.git log
la pioche trouvera des commits avec des changements incluant "word" avecgit log -Sword
la source
Après beaucoup d'expérimentation, je peux recommander ce qui suit, qui montre les validations qui introduisent ou suppriment des lignes contenant une expression rationnelle donnée, et affiche les modifications de texte dans chacune, avec des couleurs montrant des mots ajoutés et supprimés.
Il faut du temps pour courir ... ;-)
la source
GIT_PAGER=cat
ajoutez la commande ou ajoutez-la| cat
git log --pickaxe-regex -p --color-words -S "<regexp to search for>" <file or fiepath>
Vous pouvez essayer la commande suivante:
ou en utilisant
grep
de la manière suivante:Exécutez cette commande dans le répertoire parent où vous souhaitez rechercher.
la source
git log --patch --color=always | less +/searching_string
.Une autre façon / syntaxe de le faire est:
git log -S "word"
comme ça, vous pouvez rechercher par exemple
git log -S "with whitespaces and stuff @/#ü !"
la source
vim-fugitive est polyvalent pour ce type d'examen dans Vim.
Utilisez
:Ggrep
pour le faire. Pour plus d'informations, vous pouvez installer vim-fugitive et rechercher le turorial par:help Grep
. Et cet épisode: explorer-l'histoire-d'un-dépôt-git vous guidera pour faire tout cela.la source
Pour utiliser un connecteur booléen sur une expression régulière:
Cette expression régulière recherche l'expression régulière [0-9] * ou [az] * dans les messages de validation.
la source
Si vous souhaitez rechercher des données sensibles afin de les supprimer de votre historique Git (c'est la raison pour laquelle j'ai atterri ici), il existe des outils pour cela. Github en tant que page d'aide dédiée à ce problème .
Voici l'essentiel de l'article:
la source