J'ai regardé autour de moi et je ne suis pas sûr que cela soit possible, mais voici:
J'ai un fichier (javascript) (disons /lib/client.js) dans lequel j'ai un identifiant unique attribué à une variable, comme ceci:
var identifier = "SOME_IDENTIFIER";
Vous pouvez considérer l'identifiant comme un numéro de version: périodiquement, nous changerons cette variable en un nouvel identifiant.
Ce que j'aimerais faire, c'est trouver tous les identifiants uniques que nous avons jamais utilisés. Comment puis-je faire cela avec git?
J'imagine qu'il pourrait y avoir un moyen de rechercher dans l'historique git et d'imprimer la ligne correspondante "var identifier ="
. Je pourrais déduper cette liste manuellement.
Quoi qu'il en soit, j'apprécierais tout aperçu ici. Merci.
Réponses:
Depuis git 1.8.4 , il existe un moyen plus direct de répondre à votre question.
En supposant que cette ligne
110
est la ligne disantvar identifier = "SOME_IDENTIFIER";
, alors faites ceci:Cela retournera chaque commit qui a touché cette ligne de code.
[ Documentation Git (voir le paramètre de ligne de commande "-L")]
la source
Consultez la page de manuel pour
git-log
etgitdiffcore
. Je pense que cette commande le ferait, mais ce n'est peut-être pas tout à fait correct:EDIT: Voici un début approximatif pour un script bash pour afficher les lignes réelles. C'est peut-être plus ce que vous recherchez.
Il utilise
git log -G
pour trouver les commits intéressants, en utilisant--format=%H
pour produire une liste de hachages de commit. Il itère ensuite sur chaque commit intéressant, demandantgit grep
d'afficher les lignes de ce commit et du fichier qui contiennent l'expression régulière, précédés du hachage de commit.EDIT: changé pour utiliser
-G
au lieu de-S
comme suggéré dans les commentaires.la source
sfile=path/to/some_file; sfind='string_to_find'; for c in $(git log -G $sfind --format=%H -- $sfile); do git --no-pager grep -e $sfind -n $c -- $sfile; echo; done
Vous pouvez également le faire avec gitk:
Dans la liste déroulante «commit», choisissez «ajouter / supprimer une chaîne:» et dans la zone de texte à côté, entrez «var identifier =», et tous les commits qui ajoutent ou suppriment des lignes contenant cette chaîne seront mis en surbrillance.
la source
git blame file.js
ougit gui blame file.js
?git gui blame file.js
fera cela ... il vous montrera toutes les révisions d'un fichier et qui l'a changé; vous pouvez simplement cliquer en arrière dans l'historique.Si vous adaptez un peu la réponse de @ rob, le
git log
fera essentiellement pour vous, si tout ce dont vous avez besoin est une comparaison visuelle:-U0
signifie sortie en mode patch (-p
), et affiche zéro ligne de contexte autour du patch.Vous pouvez même faire cela entre les succursales:
Il peut y avoir un moyen de supprimer l'en-tête de diff, mais je n'en connais pas.
la source
Dans magit , vous pouvez le faire avec
Il vous demandera ensuite le fichier et les lignes de début et de fin.
la source