3 votes

Lors de la recherche de différences Git pour un terme, puis-je afficher uniquement la ligne sur laquelle se trouve le terme ?

Je fais un peu de nettoyage CSS et je veux trouver où une classe a été utilisée dans notre code, pour m'assurer qu'elle a été effectivement utilisée dans notre code, et non dans notre CMS ou autre.

Nous utilisons Git donc j'utilise la commande suivante pour rechercher les différences de code contenant le terme que je recherche, scrollerWrapper.

git log -GscrollerWrapper -p

Avec le drapeau -p je reçois les changements réels du fichier, mais dans certains cas cela retourne des fichiers qui font des milliers de lignes. Idéalement, je voudrais seulement voir la ou les lignes où se trouve le terme que je recherche (encore mieux si je pouvais voir x lignes avant/après la ligne).

J'ai vérifié la documentation de git-log mais je ne vois pas de paramètre pertinent.

Est-il possible de passer un paramètre supplémentaire qui limiterait la différence aux seules lignes contenant mon terme de recherche, ou d'exécuter une requête différente qui le ferait ?

Merci !

1voto

Schwern Points 33677

La chose la plus simple à faire est d'utiliser les fonctionnalités de recherche intégrées à votre pager, qui vous permet de faire défiler le texte de git log.

Pour la plupart des pagers, tapez / suivi de ce que vous voulez rechercher. Donc exécutez git log -GscrollerWrapper -p comme d'habitude, puis tapez /, puis scrollerWrapper. Cela vous amènera à la première apparition de scrollerWrapper. Appuyez sur n pour passer à la suivante.

0voto

Code-Apprentice Points 18086

Vous pouvez rediriger la sortie de git log vers grep. Sur Windows, vous pouvez le faire avec Git Bash. grep dispose de paramètres pour spécifier combien de contexte fournir pour chaque ligne correspondante.

0voto

Chris Rasys Points 907

En général, je me tourne toujours vers le vénérable Gitk lorsque j'ai besoin de chercher dans un dépôt. Heureusement, si vous connaissez la commande ps, vous pouvez voir les commandes réelles que Gitk exécute en arrière-plan lorsque vous effectuez une recherche. Gitk offre une fonction de recherche qui analyse l'historique du dépôt pour les ajouts/suppressions d'une chaîne de caractères (ce que je pense être ce que vous recherchez). La commande qu'il exécute réellement en arrière-plan est git diff-tree, qui est une commande extrêmement complexe avec environ 47 milliards d'options.

Quoi qu'il en soit, je pense qu'une commande du type git diff-tree -r -U3 -Schaîne_recherchée fonctionnerait pour vous.

  • -r rend toute la recherche récursive
  • -U est pour produire une différence unifiée, où le 3 est le nombre de lignes de contexte
  • -S est pour la chaîne de caractères à rechercher. Le format semble étrange en le tapant de cette façon, et n'oubliez pas que vous pourriez avoir besoin d'échapper les caractères spéciaux en fonction de ce que vous cherchez
  • est vous souhaitez effectuer la recherche. Vous pouvez simplement mettre le hachage du commit de votre HEAD actuel ou de votre master ou de toute autre référence de cible.

Si vous avez déjà généré des différences unifiées à partir de git en ligne de commande auparavant, la sortie devrait vous sembler assez familière ici, et ressemblera à quelque chose comme :

$ git diff-tree -r -U3 -Sutilisateur_existant 599479fc43401942cedef7187677fa222ec54c94
599479fc43401942cedef7187677fa222ec54c94
diff --git a/src/AppBundle/Controller/SubscriptionController.php b/src/AppBundle/Controller/SubscriptionController.php
index 3670973..55de07a 100644
--- a/src/AppBundle/Controller/SubscriptionController.php
+++ b/src/AppBundle/Controller/SubscriptionController.php
@@ -23,28 +23,17 @@ class SubscriptionController extends AbstractController
         $form->handleRequest($request);

         if ($form->isSubmitted() && $form->isValid()) {
-            $existing_user = $this->get('user_dao')->getUserByEmail($newly_invited_user->getEmail());
...

Cela devrait vous fournir tout ce dont vous avez besoin, la référence du commit, le numéro de ligne et le contexte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X