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?
À 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
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.
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.
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.
Cela a été retiré de GitHub. J'utilise:
$git log --all --oneline | grep "search query"
Vous pouvez également filtrer par auteur:
$git log --all --oneline --author=rickhanlonii | grep "search query"
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 ?
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
Mise à jour janvier 2017 (deux ans plus tard):
Vous pouvez maintenant rechercher des messages de validation ! (toujours uniquement dans la branche master)
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 ungit 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? ")
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:
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
Cela fonctionne bien depuis Eclipse, jusqu'à ce que github ajoute la fonctionnalité suivante:
https://wiki.Eclipse.org/EGit/User_Guide#Searching_for_commits
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é.