Comment rechercher un message de validation sur GitHub?

Pas dans un repo Git , mais plutôt dans GitHub en particulier – comment rechercher uniquement les messages de validation d’un repo / twig spécifique?

En 2017, c’est une fonctionnalité incluse dans GitHub lui-même .

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

entrer la description de l'image ici gif de https://github.com/blog/2299-search-commit-messages

Vous aviez l’habitude de faire cela, mais Github a supprimé cette fonctionnalité à la mi-2013. Pour y parvenir localement, vous pouvez faire:

 git log -g --grep=STRING 

(Utilisez le drapeau -g si vous souhaitez rechercher d’autres twigs et des commits en suspens.)

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

Mise à jour (2017/01/05):
Github a publié une mise à jour qui vous permet désormais de rechercher dans les messages de validation de leur interface utilisateur. Voir l’article sur le blog pour plus d’informations.


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

Comme ils ont basculé leur moteur de recherche vers ElasticSearch, il est impossible 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.

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 vous recommandons la solution locale git grep autres sur ce fil ont proposée.

À un moment donné, GitHub a proposé une recherche de style git grep sur les messages de validation pour un seul référentiel. Malheureusement, cette approche a exposé un déni de service susceptible de rendre un serveur de fichiers inaccessible. Pour cette raison, nous avons supprimé la recherche git grep .

Les estimations actuelles relatives à l’enveloppe arrière placent le nombre d’engagements dans GitHub à environ 80 milliards. Bien que les ingénieurs de Google se moquent de nous, il s’agit d’un nombre assez important de documents à stocker dans ElasticSearch. Nous aimerions rendre ce jeu de données consultable, mais ce n’est pas un projet sortingvial.

Cela a été supprimé de GitHub. J’utilise:

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

entrer la description de l'image ici

Vous pouvez également filtrer par auteur:

 $git log --all --oneline --author=rickhanlonii | grep "search query" 

De la page d’aide sur la recherche de code , il semble que ce ne soit pas encore possible.

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

Peut-être leur suggérer cela ?

Vous pouvez le faire avec les repos qui ont été explorés par Google (les résultats varient d’un repo à l’autre)

Rechercher toutes les twigs de tous les repositorys analysés pour “changer de licence”

“changer de licence” site: https://github.com/*/*/commits

Rechercher une twig maîtresse de tous les repositorys analysés pour “changer de licence”

“changer de licence” site: https://github.com/*/*/commits/master

Rechercher une twig maîtresse de tous les repositorys twitter analysés pour “changer de licence”

“changer de licence” site: https://github.com/twitter/*/commits/master

Rechercher toutes les twigs de repo twitter / some_project pour “changer de licence”

“changer de licence” site: https://github.com/twitter/some_project/commits

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

Vous pouvez maintenant rechercher des messages de validation ! (toujours dans la twig 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 l’infrastructure de recherche actuelle d’ Elasticsearch (introduite en janvier 2013 ).

En guise de réponse “tirée de sources crédibles et / ou officielles”, voici une interview réalisée avec les responsables de GitHub en charge de l’introduction d’Elasticsearch au 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 twig pour chaque validation. Les documents de référentiel assurent le suivi de la validation la plus récente pour ce référentiel particulier qui a été indexé. Lorsqu’un utilisateur envoie un nouvel engagement vers Github, nous extrayons ensuite ce document du référentiel d’elasticsearch. Nous voyons ensuite le dernier commit indexé et ensuite nous obtenons une liste de tous les fichiers qui ont été modifiés ou ajoutés ou supprimés entre ce dernier fichier et ce que nous avons précédemment indexé. Ensuite, nous pouvons continuer et mettre à jour les documents qui ont été modifiés. Nous n’avons pas besoin de réindexer l’intégralité de l’arborescence du code source chaque fois que quelqu’un pousse.

Andrew Cholakian: Donc, vous ne faites qu’indexer, je suppose, la twig principale.

Tim Pease: Correct. Ce n’est que le chef de la twig principale que vous allez avoir là-dedans et encore beaucoup de données, deux milliards de documents, 30 téraoctets.

Andrew Cholakian: C’est incroyablement énorme.

 [...] 

Tim Pease: Avec le code source d’indexation sur push, c’est un processus d’auto-guérison.
Nous avons ce document de repository qui garde la trace du dernier commit indexé. Si nous avons manqué, il suffit de manquer trois commits où ces travaux échouent, le prochain commit qui arrive, nous regardons toujours le diff entre le précédent commit que nous avons indexé et celui que nous voyons avec ce nouveau push.
Vous faites un git diff et vous obtenez tous les fichiers qui ont été mis à jour, supprimés ou ajoutés. Vous pouvez simplement dire: «D’accord, nous devons supprimer ces fichiers. Nous devons append ces fichiers, et tout ça. »C’est l’auto-guérison et c’est l’approche que nous avons adoptée avec pratiquement toute l’architecture.

Tout cela ne signifie pas que toutes les twigs du repo seraient indexées avec cette approche.
Une recherche de message de validation globale n’est pas disponible pour le moment.
Et Tim Pease lui-même confirme que les messages de validation ne sont pas indexés .

Notez qu’il n’est pas impossible d’obtenir l’indexation locale d’elasticsearch d’un clone local: voir ” Rechercher dans un référentiel git avec ElasticSearch ”

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

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

(Plus d’options sur ” Comment rechercher un repository Git par un message de validation? “)

Comme cela a été supprimé de Github, j’utilise gitk sous Linux pour ce faire.

Depuis le terminal, allez dans votre repository et tapez gitk

Au milieu de l’interface graphique, il y a un champ de recherche. Il fournit une bonne sélection de filtres:

barre de recherche

Portée – contenant, touchant des chemins, ajoutant / supprimant des chaînes, modifiant la correspondance des lignes

Type de correspondance – Exact / IgnCase / Regexp

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

Cela fonctionne bien dans eclipse, jusqu’à ce que github ajoute la fonctionnalité:

entrer la description de l'image ici

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

Si vous travaillez sur Ubuntu (ou peut-être sur d’autres OS Unix) et que vous avez une version locale du repository, vous pouvez essayer ce script shell brut que j’ai écrit pour ouvrir les pages GitHub correspondant à votre terme de recherche dans de nouveaux tabs. 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 

Remplacez simplement https://github.com/RepoOwnerUserName/RepoName/ par l’URL de Github de votre repository, enregistrez le script quelque part (par exemple, comme githubsearch.sh , rendez-le exécutable ( chmod +x githubsearch.sh ), puis ajoutez ce qui suit). alias de votre fichier ~/.bashrc :

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

Ensuite, de n’importe où dans votre repository git, faites-le simplement au terminal:

 githubsearch "what you want to search for" 

et tous les commits correspondant à votre terme de recherche (insensible à la casse) auront leurs pages GitHub correspondantes ouvertes dans votre navigateur. (Soyez averti que si votre terme de recherche apparaît dans des centaines de commits, cela risque de faire planter votre navigateur et de consumr le processeur de votre PC pendant un moment.)

Je l’ai seulement testé sur Ubuntu et je n’en sais pas assez sur 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 quelque chose que j’ai utilisé ici est spécifique à Bash. N’hésitez pas à commenter ou éditer pour append des informations de compatibilité.