web-dev-qa-db-fra.com

Afficher l'historique d'un fichier?

Duplicate possible:
Afficher l'historique des modifications d'un fichier à l'aide du contrôle de version de Git

Parfois, je veux parcourir l'historique d'un fichier particulier. Dans le passé, j'utilisais P4V, ce qui était très rapide et intuitif.

  1. Faites un clic droit sur un fichier et sélectionnez l'historique.
  2. Faire défiler les dates et voir un diff Nice de exactement ce qui a changé dans ce fichier sur que date. Facile.

Passer à Git est maintenant une tâche éreintante.

  1. "nom du fichier journal git"
  2. Regardez l'histoire et choisissez une date, copiez le hachage
  3. "git diff hash"
  4. Faites défiler les diff pour les éléments qui ont changé dans le fichier qui m’intéresse.
  5. Non, ce n'est pas ça, essayons une date différente - revenons à l'étape 2, rincez et répétez.

J'ai fait une recherche SO, et j'ai essayé quelques uns des guis couramment suggérés: github, gitk, gitg, git-gui.

Tous ces éléments suppriment la nécessité d’exécuter manuellement des commandes, mais le flux de travail est le même pour cela. Voir l'historique du fichier; voir commit; rechercher dans diff de nombreux fichiers non pertinents. C'est lent et répétitif.

Toutes les données sont dans le référentiel, je ne vois donc aucune raison pour que ce cas d'utilisation simple et commun ne puisse être plus simple.

Quelqu'un peut-il recommander un outil qui fait cela - ou un moyen plus efficace d'utiliser la ligne de commande pour faire ce que je veux?

Merci pour vos suggestions.

140
Chris

Avez-vous essayé ceci:

gitk path/to/file
129
Pierre Mage

Vous pouvez utiliser git log pour afficher les diffs lors de la recherche:

git log -p -- path/to/file
147
ralphtheninja

git log -p générera le correctif (le diff) pour chaque commit sélectionné. Pour un fichier unique, utilisez git log --follow -p $file.

Si vous recherchez un changement particulier, utilisez git bisect pour trouver le changement dans les affichages log (n) en divisant le nombre de validations par deux jusqu'à ce que vous trouviez où vous cherchez. pour changé.

Pensez également à revenir en arrière dans l'historique en utilisant git blame à suivez les modifications apportées à la ligne en question si vous savez de quoi il s'agit. Cette commande affiche la révision la plus récente affectant une certaine ligne. Vous devrez peut-être revenir en arrière dans quelques versions pour trouver le premier changement où quelque chose a été introduit si quelqu'un l'a modifié avec le temps, mais cela pourrait vous donner un bon départ.

Enfin, gitk en tant qu'interface graphique me montre immédiatement le correctif pour tout commit sur lequel je clique.

Exemple enter image description here:

45
Jeff Ferland

La principale question pour moi serait de savoir ce que vous essayez réellement de savoir. Essayez-vous de savoir quand un certain ensemble de modifications a été introduit dans ce fichier?

Vous pouvez utiliser git blame pour cela, il annotera chaque ligne avec un SHA1 et une date à laquelle elle a été modifiée. git blame peut également vous dire quand une certaine ligne a été supprimée ou à quel endroit elle a été déplacée si cela vous intéresse.

Si vous essayez de savoir quand un certain bogue a été introduit, git bisect est un outil très puissant. git bisect effectuera une recherche binaire sur votre historique. Vous pouvez utiliser git bisect start pour commencer la division en deux, puis git bisect bad pour marquer un commit où le bogue est présent et git bisect good pour marquer un commit qui ne contient pas le bogue. git vérifiera un commit entre les deux et vous demandera s'il est bon ou mauvais. Vous pouvez généralement trouver le commit défectueux en quelques étapes.

Depuis que j'ai utilisé git, je n'ai presque jamais trouvé le besoin de parcourir manuellement l'historique des correctifs pour trouver quelque chose, car le plus souvent, git m'offre un moyen de rechercher les informations dont j'ai besoin.

Si vous essayez de penser moins à la façon de faire un certain flux de travail, mais plus en ce qui concerne les informations dont vous avez besoin, vous aurez probablement de nombreux flux de travail qui (à mon avis) sont beaucoup plus simples et rapides.

10
LiKao