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?
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?
Réponses:
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
Image GIF de https://github.com/blog/2299-search-commit-messages
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 -g
drapeau 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.
-g
indicateur 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=fix
alors que dans la develop
branche d'un repo qui a ~ 8000 commits s'étalant sur deux ans, ne remonte qu'au 2 février.
-g
drapeau.
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.
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 grep
solution locale proposée par d'autres sur ce sujet.
À un moment donné, GitHub a proposé une git grep
recherche 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 grep
recherche.
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.
git diff's
(c'est-à-dire le contenu des validations, pas les métadonnées de validation)
Cela a été supprimé 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 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 ?
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).
Site "changer de licence": https://github.com/*/*/commits
Site "changer de licence": https://github.com/*/*/commits/master
Site "changer de licence": https://github.com/twitter/*/commits/master
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: 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 ungit 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 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? ")
Depuis que cela a été supprimé de GitHub, j'utilise gitk
Linux 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:
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
Cela fonctionne bien depuis Eclipse , jusqu'à ce que GitHub ajoute la fonctionnalité:
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 ~/.bashrc
fichier:
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.)