En utilisant Git, comment puis-je rechercher dans tous les fichiers de toutes les branches locales une chaîne donnée?
Spécifique à GitHub: est-il possible d'effectuer la recherche ci-dessus dans toutes les branches de GitHub? (Il y a plusieurs branches distantes sur mon référentiel GitHub distant que je n'aurais idéalement pas à supprimer pour cette recherche ...)
Réponses:
Vous pouvez le faire sur un référentiel Git:
La recherche avancée GitHub a une capacité de recherche de code:
La recherche de code examinera tout le code hébergé publiquement sur GitHub. Vous pouvez également filtrer par:
language:
repo:
path:
la source
git grep ...
. Regardez les autres réponses, elles sont bien meilleures que celle-ci même si elle est marquée comme réponse acceptée!path:
, parce que la documentation en un coup d'œil ne semble pas claire où appliquer ce filtre, je suppose qu'il est avant les guillemets dans votre exemple de requête?Si vous utilisez la commande @manojlds Git grep et obtenez une erreur:
alors vous devriez utiliser xargs :
Voir également Comment grep (recherche) du code commis dans l'historique Git
la source
Dans de nombreux cas,
git rev-list --all
peut renvoyer un grand nombre de commits, ce qui prend une éternité à analyser. Si vous, au lieu de rechercher dans chaque commit sur chaque branche de l'historique de votre référentiel, vous souhaitez simplement rechercher toutes les astuces de branche, vous pouvez le remplacer pargit show-ref --heads
. Donc au total:ou:
Conseil: vous pouvez écrire la sortie dans un fichier pour l'afficher dans un éditeur:
la source
git show-ref --heads
répertorie le hachage et le nom de la référence afin qu'il (2e ligne) recherche deux fois. c'estgit show-ref --heads | cut -d' ' -f2
mieux car il ne listera que les noms de référence.git show-ref --heads -s
renvoie uniquement le hachage SHA1. De plus, s'il y a plusieurs branches pointant vers le même commit, vous aurez des doublons. Vous pouvez les supprimer avecsort -u
, comme çagit show-ref --heads -s | sort -u | xargs git grep ...
function gsearch { git grep $1 $(git show-ref --heads) | grep "refs/heads" | grep $1 } # last grep to keep grep color highlight
Il y a quelques problèmes avec les solutions énumérées ici (même acceptées).
Vous n'avez pas besoin de lister tous les hachages car vous obtiendrez des doublons. En outre, cela prend plus de temps.
Il s'appuie sur cela où vous pouvez rechercher une chaîne
"test -f /"
sur plusieurs branchesmaster
etdev
commequi est identique à
Alors voilà.
Cela trouve les hachages pour le bout de toutes les branches locales et ne recherche que dans ces commits:
Si vous avez également besoin de rechercher dans les branches distantes, ajoutez
-a
:Plus loin:
la source
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
ou elle échouera avec le->
symbole dans la liste des fichiers, qui indique la relation entre les branches locales et distantesVous pouvez essayer ceci:
la source
git log --all -s"search_string"