GitHub: recherche dans les anciennes versions de fichiers

98

Je sais qu'en utilisant GitHub, je peux rechercher toutes les versions actuelles de mes fichiers dans un dépôt. Cependant, je voudrais également rechercher dans les anciennes versions de mes fichiers de dépôt. Par exemple, disons, j'avais l'habitude d'avoir une fonction appelée get_info () dans mon code, mais je l'ai supprimée il y a plusieurs versions, est-il possible de rechercher get_info et de trouver le code. Si ce n'est pas possible avec GitHub, est-ce possible à partir de la ligne de commande git?

ÉDITER

Merci à @Mark Longair pour avoir montré comment cela peut être fait à partir de la ligne de commande git. Si ce n'est pas possible dans GitHub, ce serait une excellente fonctionnalité à avoir.

Normski
la source

Réponses:

121

Actuellement, je ne crois pas qu'il soit possible de rechercher dans l'historique complet du code d'un référentiel sur le site github - le plus proche est simplement de rechercher dans le code actuel d'un référentiel avec l'option "recherche de code" sur cette page .

Cependant, à partir de la ligne de commande, vous pouvez trouver tous les commits qui ont introduit ou supprimé des lignes mentionnant get_infoavec l' -Soption à git log. par exemple:

git log -Sget_info -p

(nb il ne doit pas y avoir d'espace entre -Set le terme de recherche)

(notez également: pour rechercher plus d'un mot, entourez '):

git log -S'get info' -p

Donc, au minimum, cela devrait trouver le commit où la fonction a été introduite pour la première fois et celui qui l'a supprimée. J'ai ajouté le -ppour que vous puissiez également voir les correctifs - si beaucoup de commits ont introduit des changements qui mentionnaient la fonction qui pourrait être utile. Si la fonction était uniquement sur une autre branche, il pourrait également être utile de l'utiliser --allpour rechercher toutes les branches.

Jefromi souligne dans un commentaire ci-dessous que git 1.7.4 présentera l' -Goption comme alternative - ce changement est résumé dans un récent article de blog de Junio ​​Hamano (git mainteneur): http://gitster.livejournal.com/48191.html

Mark Longair
la source
2
Oui, je sais que je peux rechercher des commentaires, mais qu'en est-il de la recherche du code?
normski
10
L'option -S ne regarder dans le code - il trouve tout où commits get_infoest contenue dans les diff que la livraison présente. Vous pourriez être confus avec l' --grepoption, qui recherche les messages du journal.
Mark Longair
2
@normski: Et les versions récentes de git ont ajouté l' -Goption similaire , qui prend une expression régulière au lieu d'une chaîne fixe.
Cascabel
@Jefromi: merci d'avoir mentionné cela - j'ai ajouté cela à la réponse, j'espère que ça va.
Mark Longair
2
@Anthony Damico: oui, citez simplement la chaîne de recherche, par exemplegit log -S'get info' -p
Mark Longair