git blame
Description
La commande git blame est un outil flexible disposant de plusieurs options d'utilisation. La fonction principale de git blame est l'affichage des métadonnées de l'auteur associées à une ligne spécifique d'un fichier. Elle est utilisée pour explorer l'historique du fichier et identifier le dernier auteur qui a modifié la ligne.

Comment ça marche
Pour bien illustrer le fonctionnement de git blame, prenons un exemple avec un fichier README.md contenant quelques commits de différents auteurs.
Dans l'exemple suivant, nous utilisons git blame. L'état du dépôt d'exemple peut être exploré avec un git log. L'historique des commits se présente comme suit :
git log et git blame
git log
commit 745a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a
Author: Bob Smith <[email protected]m>
Date: Fri Apr 1 19:55:15 2019 +0000
Another commit to help git blame track the who, the what, and the when
commit eb06faedb1fdd159d62e4438fc8dbe9c9fe0728b
Author: Bob Smith <[email protected]m>
Date: Fri Apr 1 19:53:23 2019 +0000
Creating the third commit, along with Nick and Robert, so that Nick can get git blame docs.
commit 990c2b6a84464fee153253dbf02e845a4db372bb
Merge: 82496ea 89feb84
Author: Tom Brown <[email protected]m>
Date: Fri Apr 1 05:33:01 2019 +0000
Merged in tom-brown/git-blame-example/albert-so/readmemd-edited-online-with-bitbucket-1519865641474 (pull request #2)
README.md edited online with Bitbucket
commit 73a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8
Author: Tom Brown <[email protected]m>
Date: Fri Apr 1 00:54:03 +0000
README.md edited online with BitbucketLa commande git blame fonctionne sur des fichiers individuels. Par défaut, son exécution affiche les informations de suivi (blame) pour le fichier spécifié.
La sortie suivante est un extrait du résultat complet de git blame pour le fichier README :
git blame
git blame README.md
83253a1b (marioswift 2019-02-28 13:37:02 -0800 1) # Git Blame example
83253a1b (marioswift 2019-02-28 13:37:02 -0800 2)
73a0b1c2 (Tom Brown 2019-04-01 00:54:03 +0000 3) Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.
83253a1b (marioswift 2019-02-28 13:37:02 -0800 4)
83253a1b (marioswift 2019-02-28 13:37:02 -0800 5) There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable.
83253a1b (marioswift 2019-02-28 13:37:02 -0800 6)
73a0b1c2 (Tom Brown 2019-04-01 00:54:03 +0000 7) Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod TEMPOR incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laborum nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumOptions courantes
Vous pouvez également limiter la sortie à des lignes spécifiques à l'aide de l'option -L, comme illustré dans le tableau ci-dessous.
| git blame -L 1,3 README.md | Limite la sortie à la plage de lignes demandée. Ici, nous avons limité la sortie aux lignes 1 à 3. |
|---|---|
| git blame -e README.md | Affiche l'adresse e-mail de l'auteur au lieu du nom d'utilisateur. |
| git blame -w README.md | Ignore les modifications d'espacement. Si un auteur précédent a modifié les espaces (par exemple, en remplaçant des tabulations par des espaces), cela peut masquer les véritables modifications de contenu dans la sortie. |
| git blame -M README.md | L'option -M détecte les lignes déplacées ou copiées au sein du même fichier. Cela indique l'auteur original des lignes au lieu du dernier auteur qui les a déplacées ou copiées. |
| git blame -C README.md | L'option -C détecte les lignes qui ont été déplacées ou copiées depuis d'autres fichiers. Cela indique l'auteur original des lignes au lieu du dernier auteur qui les a déplacées ou copiées. |
| git blame -p README.md | Affiche le diff complet pour chaque ligne, ce qui facilite la visualisation exacte des modifications. |
git blame vs git log
La commande git blame affiche le dernier auteur ayant modifié une ligne, mais il peut parfois être nécessaire de voir quand une ligne a été initialement ajoutée. Cela peut s'avérer difficile avec git blame. À cette fin, une combinaison des options -w, -C et -M peut être utilisée. Cependant, il sera plus simple d'utiliser git log.
Utilisez git log avec l'option -S pour afficher les commits où une chaîne de caractères spécifique a été ajoutée ou supprimée.
Prenons l'exemple suivant :
git log -S example
git log -S "CSS3D and WebGL renderers." --pretty=format:'%h %an %ad %s'
e339d3c85a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d John Carter Fri Jun 13 16:51:06 2015 +0200 reverted README.md to original content
509c2cc35a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d Max Fri Jul 8 13:56:14 2015 +0200 Updated README
cb20237cc1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6 Leo Sat Aug 31 00:22:36 2012 +0100 Removed DOMRenderer. Now with the CSS3DRenderer it has become irrelevant.La sortie montre que le fichier README.md a été ajouté et modifié 3 fois par trois auteurs. L'option --pretty=format:'...' personnalise la sortie de git log pour afficher des champs spécifiques tels que le hash du commit, l'auteur, la date et le sujet.
Practice
Quelles sont les fonctions et options de la commande 'git blame' dans Git ?