Comment puis-je rechercher un message de validation sur GitHub?


328

Pas dans un référentiel Git , mais plutôt dans GitHub en particulier - comment rechercher uniquement les messages de validation d'un référentiel / branche spécifique?


3
Le dépôt est-il public ou privé?

2
Que diriez-vous de rechercher un message de validation dans toutes les fourches? Essayer d'éviter de réinventer la roue lorsque le référentiel principal a plus de 100+ fourches!
Daniel Sokolowski

Des changements depuis lors?
Pavel Šimerda

Je veux rechercher le réseau commits
frumbert

Réponses:


68

Depuis 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

entrez la description de l'image ici Image GIF de https://github.com/blog/2299-search-commit-messages


J'obtiens une erreur d'autorisation lors de la recherche d'un dépôt privé auquel j'ai accès en lecture / écriture.
anon58192932

1
Je regarde depuis cinq minutes et je n'arrive pas à comprendre où va la souris après avoir zoomé vers le bas et vers la droite.
Kevin Krumwiede

1
@KevinKrumwiede probablement au bouton "arrêter l'enregistrement" haha
Corey Cole

J'ai abandonné et utilisé "git log --all --grep = searhterm"
Edwin Evans

206

Auparavant, vous pouviez le faire, mais GitHub a supprimé cette fonctionnalité à un moment donné mi-2013. Pour y parvenir localement, vous pouvez faire:

git log -g --grep=STRING

(Utilisez le -gdrapeau si vous souhaitez rechercher d'autres branches et commits suspendus.)

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

143
pourquoi diable l'ont-ils retiré? C'est une fonctionnalité vraiment utile.
Josh Brown

1
Factor Mystic: I.espaces.dans.la.chaîne suffit généralement.
dbrower

11
Astuce omettre l' -gindicateur pour les cas d'utilisation les plus courants. Je n'y ai pas trop réfléchi, mais avec -g, la recherche semble remonter à seulement un mois. git log -g --grep=fixalors que dans la developbranche d'un repo qui a ~ 8000 commits s'étalant sur deux ans, ne remonte qu'au 2 février.
Dan Dascalescu

1
@DanDascalescu Strange, j'ai pu trouver des commits remontant au moins 5 mois avec le -gdrapeau.
Chrispy

134

Mise à jour (2017/01/05):

GitHub a publié une mise à jour qui vous permet désormais de rechercher dans les messages de validation depuis leur interface utilisateur. Voir l'article de blog pour plus d'informations.


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

Depuis qu'ils ont changé leur moteur de recherche pour 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 en ce moment.


7
+1 Vous m'avez fait gagner du temps sans résultat dans GitHub en vous demandant comment réaliser ce que je supposais être une fonctionnalité évidente. Nous devons donc maintenant cloner le dépôt localement pour grep via la ligne de commande à la place. Bon sang, c'est du progrès hein?! ;)
McNab

68
Même leur recherche avancée dans l'interface utilisateur Web ne permet pas de rechercher dans le champ le plus important - le message de validation réel. C'est absolument ridicule l'OMI. Github rassemblez-vous!
Brad Thomas

22
Oui. Oubliez le fait qu'ils ont construit un service Web qui aide à révolutionner et à populariser les logiciels open source, le fait qu'ils n'ont pas cette seule fonctionnalité en fait une imposture complète!
Jon Cairns

12
Merci d'avoir pris le temps de publier le contenu de votre discours avec GitHub dans un lieu public facilement accessible. Il est absurde que ce soit le seul moyen pour le public d'obtenir de telles informations - il est profondément stupide que GitHub ne dispose pas d'un outil de suivi des problèmes publics - mais en présence d'une telle stupidité, ce que vous avez fait ici est un moyen utile d'empêcher des centaines de d'autres de perdre du temps à envoyer la même demande. Merci pour les centaines d'heures de productivité que vous avez économisées.
Mark Amery

1
Eh bien pas beaucoup mieux que le tracker public d'Atlasian, qui est plein de problèmes ouverts de 7 ans avec des milliers de votes positifs ...
Askdesigners

58

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

À un moment donné, GitHub a proposé une git greprecherche de style sur les 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 git greprecherche.

Les estimations actuelles de l'arrière de l'enveloppe placent le nombre de validations dans GitHub autour de la barre des 80 milliards. Bien que les ingénieurs de Google rient derrière 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 trivial.


2
+1. Cela semble confirmer ce que je pensais en écrivant ma réponse : les messages de validation ne sont pas indexés: vous travaillez avec l'indexation git diff's(c'est-à-dire le contenu des validations, pas les métadonnées de validation)
VonC

Que diriez-vous simplement du bouton "sauter pour valider"? Actuellement, il est accessible à partir de l'URL - stackoverflow.com/a/12214817/817632 mais il n'y a pas d'interface pour cela (pas que je sache). Cas d'utilisation - trouvez un hachage de validation quelque part dans bower.json au lieu de la version et voulez voir exactement ce que fait cette validation. Cela vous fera gagner du temps sur Google.
Olga

44

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

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

entrez la description de l'image ici

Vous pouvez également filtrer par auteur:

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

3
Cela a fonctionné pour moi, mais la réponse la plus votée n'a pas fonctionné.
makdad

21

Depuis 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 référentiel, y compris la possibilité de choisir des fichiers ou des chemins de recherche, mais vous ne pouvez pas spécifier que vous souhaitez rechercher dans les validations.

Peut-être leur suggérer cela ?


18
Cela semble être le cas d'utilisation le plus "par défaut" lorsqu'il s'agit de rechercher dans un référentiel. Surtout pour quelqu'un qui apprend à connaître un nouveau référentiel avec des tonnes de commits. Ils devraient certainement envisager d'ajouter ceci.
Jose Browne

19

Vous pouvez le faire avec des référentiels qui ont été explorés par Google (les résultats varient d'un référentiel à l'autre).

Rechercher toutes les branches de tous les référentiels analysés pour "changer de licence"

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

Rechercher la branche principale de tous les référentiels analysés pour "modifier la licence":

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

Recherche dans la branche principale de tous les référentiels twitter explorés pour "modifier la licence"

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

Rechercher toutes les branches du référentiel twitter / some_project pour "changer de licence"

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


4
@DZenBot si ce n'est pas un dépôt public, alors vous avez probablement déjà une copie locale pour git grep, je mets juste cette réponse pour ceux qui ne veulent pas cloner un dépôt public entier pour savoir quand un changement a été fait. Je l'utilise principalement pour trouver des validations qui suppriment le support des anciennes versions de gtk ou lorsque les licences changent en gpl3
technosaurus

15

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: Je ne suis pas sûr que cela puisse être possible, compte tenu de la base actuelle de l'infrastructure de recherche sur Elasticsearch (introduite en janvier 2013 ).

En guise de réponse "puisant dans des sources crédibles et / ou officielles", voici un entretien réalisé avec les personnes GitHub en charge de l'introduction d'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 validations et que vous avez une branche pour chaque validation. Les documents du référentiel conservent la trace de la validation la plus récente pour ce référentiel particulier qui a été indexé. Lorsqu'un utilisateur envoie un nouveau commit à Github, nous tirons ensuite ce document de référentiel depuis elasticsearch. Nous voyons ensuite le commit le plus récemment indexé, puis nous obtenons une liste de tous les fichiers qui ont été modifiés, ajoutés ou supprimés entre cette récente poussée et ce que nous avons précédemment indexé. Ensuite, nous pourrons aller de l'avant et simplement mettre à jour les documents qui ont été modifiés. Nous n'avons pas à réindexer la totalité de l'arborescence du code source à chaque fois que quelqu'un pousse.

Andrew Cholakian: Donc, vous les gars indexez , je suppose, la branche principale.

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

Andrew Cholakian: C'est énormément énorme.

[...]

Tim Pease: Avec l'indexation du code source sur push, c'est un processus d'auto-guérison.
Nous avons ce document de référentiel qui garde la trace du dernier commit indexé. Si nous avons manqué, il nous arrive de manquer trois commits où ces travaux échouent, le prochain commit qui arrive, nous examinons toujours la différence entre le commit précédent que nous avons indexé et celui que nous voyons avec cette nouvelle poussée.
Vous faites un git diffet 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 ajouter ces fichiers, et tout ça. » C'est l'auto-guérison et c'est l'approche que nous avons adoptée avec à peu près toute l'architecture.

Cela signifie que toutes les branches de tout le repo ne seraient pas 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 que les messages de validation ne sont pas indexés .

Notez qu'il n'est pas impossible d'obtenir sa propre indexation locale elasticsearch d'un clone local: voir " Recherche d'un référentiel git avec ElasticSearch "

Mais pour un dépôt spécifique, le plus simple reste de le cloner et de faire un:

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

(Plus d'options dans " Comment rechercher un référentiel Git par message de validation? ")


7

Depuis que cela a été supprimé de GitHub, j'utilise gitkLinux pour ce faire.

Depuis le terminal, accédez à votre référentiel 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 les chemins, ajoutant / supprimant une chaîne, modifiant la correspondance des lignes

Type de correspondance - Exact / IgnCase / Regexp

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



4

Si vous avez une version locale du référentiel, vous voudrez peut-être essayer ce script shell brut que j'ai écrit pour ouvrir les pages GitHub pour toutes les validations correspondant à votre terme de recherche dans de nouveaux onglets dans 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-le simplement https://github.com/RepoOwnerUserName/RepoName/par l'URL GitHub réelle de votre référentiel, enregistrez le script quelque part (par exemple as githubsearch.sh, rendez-le exécutable ( chmod +x githubsearch.sh), puis ajoutez l'alias suivant à votre ~/.bashrcfichier:

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

Ensuite, de n'importe où dans votre référentiel Git, faites-le au terminal:

githubsearch "what you want to search for"

et tout commit correspondant à votre terme de recherche (insensible à la casse) verra ses pages GitHub correspondantes ouvertes dans votre navigateur. (Soyez averti que si votre terme de recherche apparaît dans des centaines de validations, cela pourrait bien planter votre navigateur et manger le processeur de votre PC pendant un certain temps.)


0

À partir de la mi-2019, tapez simplement tout ce que vous souhaitez rechercher dans la zone de recherche en haut à gauche , puis cliquez sur «Valeurs».

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.