web-dev-qa-db-fra.com

Comment rechercher un message de commit sur GitHub?

Pas dans un repo Git , mais plutôt GitHub spécifiquement - comment puis-je rechercher uniquement les messages de validation d'un repo/branche spécifique?

319
ripper234

À partir de 2017, cette fonctionnalité est incluse dans GitHub lui-même .

L'exemple de recherche utilisé par eux est repo:torvalds/linux merge:false crypto policy

enter image description here gif de https://github.com/blog/2299-search-commit-messages

60
vartec

Vous pouviez le faire auparavant, mais Github a supprimé cette fonctionnalité à la mi-2013. Pour y parvenir localement, vous pouvez faire:

git log -g --grep=STRING

(Utilisez l'indicateur -g si vous souhaitez rechercher d'autres branches et des commits suspendus.)

-g, --walk-reflogs
    Instead of walking the commit ancestry chain, walk reflog entries from
    the most recent one to older ones. 
203
dsldsl

Mise à jour (2017/01/05):
Github a publié une mise à jour qui vous permet maintenant de rechercher dans les messages de commit à partir de leur interface utilisateur. Voir blog post pour plus d'informations.


J'ai eu la même question et contacté quelqu'un @Github hier:

Comme ils ont remplacé leur moteur de recherche par ElasticSearch, il n’est pas possible de rechercher des messages de validation à l’aide de l’interface utilisateur Github. Mais cette fonctionnalité est sur la liste de souhaits de l'équipe.

Malheureusement, il n'y a pas de date de sortie pour cette fonction pour le moment.

132
oktopus

La réponse courte est que vous ne pouvez pas rechercher les messages de validation directement sur le site Web github.com. Pour le moment, nous recommandons la solution locale git grep proposée par d'autres utilisateurs sur ce sujet.

À un moment donné, GitHub offrait une recherche de style git grep sur des messages de validation pour un seul référentiel. Malheureusement, cette approche a révélé un déni de service qui pourrait rendre un serveur de fichiers inaccessible. Pour cette raison, nous avons supprimé la recherche git grep.

Selon les estimations actuelles, le nombre de commits dans GitHub se situe autour de 80 milliards. Bien que les ingénieurs de Google se moquent de nous, il s’agit d’un assez grand nombre de documents à stocker dans ElasticSearch. Nous aimerions rendre cet ensemble de données consultable, mais ce n'est pas un projet trivial.

56
TwP

Cela a été retiré de GitHub. J'utilise:

$git log --all --oneline | grep "search query"

enter image description here

Vous pouvez également filtrer par auteur:

$git log --all --oneline --author=rickhanlonii | grep "search query"
44
Rick Hanlon II

Depuis la page d’aide sur code de recherche , il semble que ce n’est pas encore possible.

Vous pouvez rechercher du texte dans votre référentiel, y compris la possibilité de choisir des fichiers ou des chemins dans lesquels effectuer la recherche, mais vous ne pouvez pas spécifier que vous souhaitez effectuer une recherche dans les validations.

Peut-être leur suggérer ?

21
Jon Cairns

Vous pouvez le faire avec les dépôts analysés par Google (les résultats varient d'un dépôt à l'autre).

Effectuer une recherche dans toutes les branches de toutes les pensions analysées pour "changer la licence"

Site "Modifier la licence": https://github.com/*/*/commits

Recherche dans la branche principale de tous les dépôts analysés pour "changer de licence"

Site "Modifier la licence": https://github.com/*/*/commits/master

Rechercher dans la branche principale de tous les dépôts repérés sur Twitter pour "changer de licence"

Site "changer de licence": https://github.com/Twitter/*/commits/master

Rechercher dans toutes les branches de Twitter/some_project repo pour "change license"

Site "changer de licence": https://github.com/Twitter/some_project/commits

19
technosaurus

Mise à jour janvier 2017 (deux ans plus tard):

Vous pouvez maintenant rechercher des messages de validation ! (toujours uniquement dans la branche master)

https://cloud.githubusercontent.com/assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


Février 2015: Pas sûr que cela soit possible, compte tenu de la base actuelle d'infrastructure de recherche sur Elasticsearch (introduit en janvier 201 ).

En guise de réponse "à partir de sources crédibles et/ou officielles", voici un interview réalisée avec les responsables de GitHub chargés d'introduire Elasticsearch sur GitHub (août 2013)

Tim Pease: Nous avons deux types de documents: l'un est un fichier de code source et l'autre est un référentiel. La façon dont git fonctionne est que vous avez des commits et que vous avez une branche pour chaque commit. Les documents de référentiel gardent une trace de la validation la plus récente pour ce référentiel indexé. Lorsqu'un utilisateur envoie un nouveau commit à Github, nous extrayons ce document de référentiel d'elasticsearch. Nous voyons ensuite la dernière validation validée, puis nous obtenons une liste de tous les fichiers qui ont été modifiés, ajoutés ou supprimés entre ce Push récent et ce que nous avons précédemment indexé. Ensuite, nous pouvons aller de l'avant et simplement mettre à jour les documents qui ont été modifiés. Nous n’avons pas besoin de réindexer l’arborescence du code source dans son intégralité chaque fois que quelqu'un effectue une compression.

Andrew Cholakian: Donc, vous n’indexez que la branche principale, je suppose,

Tim Pease: Correct. Ce n’est que le chef de la branche maîtresse que vous allez intégrer, mais c’est toujours beaucoup de données, deux milliards de documents, 30 téraoctets.

Andrew Cholakian: C'est incroyablement énorme.

[...]

Tim Pease: Avec l’indexation du code source sur Push, c’est un processus à guérison automatique.
Nous avons ce document de référentiel qui garde une trace du dernier commit indexé. Si nous manquons, nous manquons simplement trois commissions là où ces emplois échouent, le prochain engagement qui arrive, nous examinons toujours la différence entre le précédent engagement que nous avons indexé et celui que nous voyons avec ce nouveau Push.
Vous faites un git diff et vous obtenez tous les fichiers mis à jour, supprimés ou ajoutés. Vous pouvez simplement dire: "D'accord, nous devons supprimer ces fichiers. Nous devons ajouter ces fichiers et tout cela. "C’est l’auto-guérison et c’est l’approche que nous avons adoptée avec pratiquement toute l’architecture.

Cela signifie que non toutes les branches de toutes le rapport seront indexées avec cette approche.
Une recherche de message de validation globale n'est pas disponible pour l'instant.
Et Tim Pease lui-même confirme Les messages de validation ne sont pas indexés .

Notez qu'il n'est pas impossible d'obtenir sa propre indexation locale d'un clone local avec elasticsearch: voir " recherche dans un dépôt git avec ElasticSearch "

Mais pour un repo spécifique, le plus simple reste de le cloner et de faire un:

git log --all --grep='my search'

(Plus d'options à " Comment rechercher un dépôt Git par message de validation? ")

14
VonC

Depuis que cela a été supprimé de Github, j'utilise gitk sous Linux pour le faire.

Depuis le terminal, allez dans votre référentiel et tapez gitk

Au milieu de l'interface graphique, il y a une boîte de recherche. Il fournit une bonne sélection de filtres:

search bar

Portée - contenant, chemins touchants, ajout/suppression de chaîne, modification de la correspondance de ligne

Type de correspondance - Exact/IgnCase/Regexp

Champs de recherche - Tous les champs/Titre/Commentaires/Committer

7
Kirk

Cela fonctionne bien depuis Eclipse, jusqu'à ce que github ajoute la fonctionnalité suivante:

enter image description here

https://wiki.Eclipse.org/EGit/User_Guide#Searching_for_commits

6
chrismarx

Si vous travaillez sur Ubuntu (ou peut-être sur d'autres systèmes d'exploitation Unix) et que vous avez une version locale du référentiel, vous pouvez essayer ce script de shell brut que j'ai écrit pour ouvrir les pages GitHub de tous les commits correspondant à votre terme de recherche dans les nouveaux onglets de votre navigateur par défaut:

#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
    python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done

Il suffit de remplacer https://github.com/RepoOwnerUserName/RepoName/ par l'URL Github réelle de votre référentiel, enregistrez le script quelque part (par exemple, en tant que githubsearch.sh, rendez-le exécutable (chmod +x githubsearch.sh), puis ajoutez l'alias suivant à votre ~/.bashrc fichier:

alias githubsearch='/path/to/githubsearch.sh'

Ensuite, où que vous soyez dans votre dépôt Git, faites ceci au niveau du terminal:

githubsearch "what you want to search for"

et les commits qui correspondent à votre terme de recherche (insensible à la casse) verront leurs pages GitHub correspondantes ouvertes dans votre navigateur. (Soyez averti que si votre terme de recherche apparaît par centaines de modifications, cela pourrait bloquer votre navigateur et endommager le processeur de votre PC pendant un moment.)

Je n'ai testé cela que sur Ubuntu et je ne connais pas suffisamment les scripts Shell pour savoir si cela fonctionnera sur d'autres systèmes d'exploitation basés sur Unix - en particulier, je ne sais pas si tout ce que j'ai utilisé ici est spécifique à Bash. N'hésitez pas à commenter ou à modifier pour ajouter des informations de compatibilité.

4
Mark Amery

À partir de la mi-2019, il vous suffit de saisir ce que vous souhaitez rechercher dans le champ de recherche en haut à gauche , puis de cliquer sur "Valider".

enter image description here

0
M3RS