Git: comment analyser le code qui a une histoire de plusieurs fichiers?
Question
Je suis sur le point de déplacer une tonne de fichiers autour d'un projet existant. Avant de le faire, je voudrais avoir une prise ferme sur certaines techniques utilisées pour analyser le code qui a une histoire de plusieurs fichiers.
Comment puis-je utiliser git pour demander: « d'où vient cette ligne de code viennent » lorsque le contenu est déplacé à travers plusieurs fichiers qu'il est temps de la vie?
Je sais que git ne détecte pas renomme explicitement (pour une bonne raison) il semble que je devrais être en mesure de demander, je ne suis pas sûr de savoir comment. S'il y a la méthode de visualiser ce qui serait génial de savoir aussi.
La solution
Je recommande la recherche à trois outils dans la boîte à outils git. Le premier est le blâme, ce qui est sensiblement la même que dans cvs. Il montre que la date de dernière touchèrent ligne dans un fichier. Si vous voulez regarder voir ce qu'il y avait avant, vous pouvez prendre le commettras qui a touché la ligne et regarder la précédente commettre.
git show <sha1_of_interesting_commit>^ -- file/path
Vous pouvez répéter le blâme pour voir ce qui est arrivé avant.
git blame <sha1_of_interesting_commit>^ -- file/path
Le deuxième outil utilise --follow
pour le suivi des dossiers passés renomme.
git log --follow -- file/path
Le troisième - et peut-être l'outil le plus utile - est l'option pickaxe pour ouvrir une session. Cette recherche historique des changements, les lignes supprimées ou modifiées introduites qui comprennent un peu donné de texte. Ceci est particulièrement utile pour des choses comme le suivi des noms de fonction. Il peut être nouveau dans un fichier dans un commit particulier, mais est-il venu d'un fichier source différent? Était un appel à elle ajouté en même temps, ou avant son transfert?
git log -S"Interesting_Function"
Si vous utilisez un patch ou une option stat (par exemple de -p
ou --stat
), la sortie sera limitée aux fichiers dont les changements réellement impliqués la chaîne de recherche sauf si vous utilisez également --pickaxe-all
où tout le changement est affiché.
Combiné avec git grep
pour montrer où toutes les occurrences actuelles d'une chaîne sont Pioche est un outil d'exploration de l'histoire extrêmement utile.
Autres conseils
git blame
est ce que vous utiliseriez pour demander « d'où vient cette ligne de code venir? ». Je ne sais pas si elle gère renomme. Probablement le fait.