Français â–Ÿ Topics â–Ÿ Latest version â–Ÿ git-blame last updated in 2.52.0

NOM

git-blame - Montrer la rĂ©vision et l’auteur qui ont modifiĂ© en dernier chaque ligne d’un fichier

SYNOPSIS

git blame [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
	    [-L <plage>] [-S <fichier-de-révs>] [-M] [-C] [-C] [-C] [--since=<date>]
	    [--ignore-rev <rév>] [--ignore-revs-file <fichier>]
	    [--color-lines] [--color-by-age] [--progress] [--abbrev=<n>]
	     [--contents <fichier>] [<rév> | --reverse <rév>..<rév>][--] <fichier>

DESCRIPTION

Annote chaque ligne du fichier donné avec les informations de la derniÚre révision qui a modifié la ligne. Optionnellement, commence à annoter à partir de la révision donnée.

Lorsqu’il est spĂ©cifiĂ© une ou plusieurs fois, -L limite l’annotation aux lignes demandĂ©es.

L’origine des lignes est automatiquement suivie Ă  travers les renommages de fichiers entiers (il n’y a actuellement aucune option pour dĂ©sactiver le suivi des renommages). Pour suivre les lignes dĂ©placĂ©es d’un fichier Ă  un autre, ou pour suivre les lignes qui ont Ă©tĂ© copiĂ©es et collĂ©es depuis un autre fichier, etc., voir les options -C et -M.

Le rapport ne vous dit rien sur les lignes qui ont Ă©tĂ© supprimĂ©es ou remplacĂ©es ; vous devez utiliser un outil tel que "git diff" ou l’interface "pickaxe" briĂšvement mentionnĂ©e dans le paragraphe suivant.

Outre la prise en charge de l’annotation des fichiers, Git permet Ă©galement de rechercher dans l’historique du dĂ©veloppement la modification oĂč un extrait de code est apparu. Il est ainsi possible de savoir quand un extrait de code a Ă©tĂ© ajoutĂ© Ă  un fichier, dĂ©placĂ© ou copiĂ© entre des fichiers, ou supprimĂ© ou remplacĂ©. Il fonctionne en recherchant une chaĂźne de texte dans le diff. Un petit exemple de l’interface pickaxe qui recherche blame_usage :

$ git log --pretty=oneline -S'blame_usage'
5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S <fichier-d-ancĂȘtre>
ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output

OPTIONS

-b

Afficher un SHA-1 vierge pour les validations de limite. Cela peut Ă©galement ĂȘtre contrĂŽlĂ© par l’option de configuration blame.blankBoundary.

--root

Ne pas considĂ©rer les commits de base comme des limites. Ceci peut Ă©galement ĂȘtre contrĂŽlĂ© via l’option de configuration blame.showRoot.

--show-stats

Inclure des statistiques supplémentaires à la fin de la sortie de blame.

-L <début>,<fin>
-L: <nomfonc>

N’annoter que la plage de lignes donnĂ©e par <dĂ©but>,<fin> ou par la regex du nom de la fonction <nom-de-fonction>. Peut ĂȘtre spĂ©cifiĂ© plusieurs fois. Les intervalles qui se chevauchent sont autorisĂ©s.

<dĂ©but> et <fin> sont facultatifs. -L <dĂ©but> ou -L <dĂ©but>,, s’étend de <dĂ©but> jusqu’à la fin du fichier. -L,<fin> s’étend du dĂ©but du fichier jusqu’à <fin>.

<dĂ©but> et <fin> peuvent prendre l’une de ces formes :

  • <nombre>

    Si <début> ou <fin> est un nombre, il spécifie un numéro de ligne absolu (les lignes comptent à partir de 1).

  • /<regex>/

    Cette forme utilisera la premiÚre ligne correspondant à la regex POSIX donnée. Si <début> est une regex, la recherche se fera à partir de la fin de la plage -L précédente, le cas échéant, sinon à partir du début du fichier. Si <début> est ^/<regex>/, la recherche se fera à partir du début du fichier. Si <fin> est une regex, la recherche débutera à partir de la ligne donnée par <début>.

  • +<offset> ou -<offset>

    Ceci n’est valable que pour <fin> et spĂ©cifiera un nombre de lignes avant ou aprĂšs la ligne donnĂ©e par <dĂ©but>.

Si :<nom-de-fonction> est donnĂ© Ă  la place de <dĂ©but> et de <fin>, il s’agit d’une expression rĂ©guliĂšre qui indique la plage depuis premiĂšre ligne qui correspond Ă  <nom-de-fonction>, jusqu’à la ligne de nom-de-fonction suivante. La recherche de :<nom-de-fonction> se fait Ă  partir de la fin de la plage -L prĂ©cĂ©dente, s’il y en a une, sinon Ă  partir du dĂ©but du fichier. La recherche de ^:<nom-de-fonction> commence au dĂ©but du fichier. Les noms de fonction sont dĂ©terminĂ©s de la mĂȘme maniĂšre que celle par laquelle git diff fonctionne sur les en-tĂȘtes de section de rustine (voir DĂ©finir un en-tĂȘte personnalisĂ© dans gitattributes[5]).

-l

Afficher la révision long (par défaut : désactivé).

-t

Afficher les horodatages bruts (Défaut : désactivé).

-S <fichier-des-révs>

Utiliser les rĂ©visions depuis le fichier-des-rĂ©visions au lieu d’appeler git-rev-list[1].

--reverse <rév>..<rév>

Parcourir l’historique en avant au lieu d’en arriĂšre. Au lieu de montrer la rĂ©vision dans laquelle une ligne est apparue, ceci montre la derniĂšre rĂ©vision dans laquelle une ligne a existĂ©. Cela nĂ©cessite une gamme de rĂ©visions comme DÉBUT..FIN oĂč le chemin de blĂąme existe dans DÉBUT. Pour plus de commoditĂ©, git blame --reverse DÉBUT est pris comme git blame --reverse DÉBUT..HEAD.

--first-parent

Ne suivre que le premier commit parent lors de la rencontre d’un commit de fusion. Cette option peut ĂȘtre utilisĂ©e pour dĂ©terminer le moment oĂč une ligne a Ă©tĂ© introduite dans une branche d’intĂ©gration particuliĂšre, plutĂŽt que le moment oĂč elle a Ă©tĂ© introduite dans l’historique global.

-p
--porcelain

Afficher dans un format propice Ă  la consommation par machine.

--line-porcelain

Afficher le format porcelaine, mais sortir les informations de commit pour chaque ligne, et pas seulement la premiĂšre fois qu’un commit est rĂ©fĂ©rencĂ©. Implique --porcelaine.

--incremental

Afficher le résultat progressivement dans un format conçu pour la consommation par une machine.

--encoding=<codage>

SpĂ©cifier l’encodage utilisĂ© pour produire les des noms d’auteurs et les rĂ©sumĂ©s des commits. Le dĂ©finir sur none rend la sortie de blĂąme des donnĂ©es non converties. Pour plus d’informations, voir la discussion sur l’encodage dans la page manuelle git-log[1].

--contents <fichier>

Annoter en utilisant le contenu du fichier nommĂ©, en commençant par <rĂ©v> si elle est spĂ©cifiĂ©e, et HEAD sinon. Vous pouvez spĂ©cifier - pour que la commande lise le contenu du fichier Ă  partir de l’entrĂ©e standard.

--date <format>

SpĂ©cifie le format utilisĂ© pour les dates sur la sortie. Si --date n’est pas fourni, la valeur de la variable de configuration blame.date est utilisĂ©e. Si la variable de configuration blame.date n’est pas non plus dĂ©finie, le format iso est utilisĂ©. Pour les valeurs prises en charge, voir la discussion de l’option --date Ă  git-log[1].

--[no-]progress

L’état d’avancement est indiquĂ© par dĂ©faut sur le flux d’erreurs standard lorsqu’il est connectĂ© Ă  un terminal. Ce drapeau permet de signaler l’état d’avancement mĂȘme s’il n’est pas attachĂ© Ă  un terminal. On ne peut pas utiliser --progress avec --porcelain ou --incremental.

-M[<num>]

DĂ©tecter les lignes dĂ©placĂ©es ou copiĂ©es dans un fichier. Lorsqu’un commit dĂ©place ou copie un bloc de lignes (par exemple, le fichier original a A puis B, et le commit le change en B puis A), l’algorithme traditionnel de blame ne remarque que la moitiĂ© du mouvement et blĂąme gĂ©nĂ©ralement les lignes qui ont Ă©tĂ© dĂ©placĂ©es vers le haut (c’est-Ă -dire B) au parent et attribue le blĂąme aux lignes qui ont Ă©tĂ© dĂ©placĂ©es vers le bas (c’est-Ă -dire A) au commit enfant. Avec cette option, les deux groupes de lignes sont blĂąmĂ©s sur le parent en effectuant des passes d’inspection supplĂ©mentaires.

<num>est facultatif, mais c’est la limite infĂ©rieure sur le nombre de caractĂšres alphanumĂ©riques que Git doit dĂ©tecter comme dĂ©placĂ©es/copiĂ©es dans un fichier pour qu’il associe ces lignes avec le commit parent. La valeur par dĂ©faut est 20.

-C[<num>]

En plus de -M, dĂ©tecter les lignes dĂ©placĂ©es ou copiĂ©es Ă  partir d’autres fichiers qui ont Ă©tĂ© modifiĂ©s dans le mĂȘme commit. Ceci est utile lorsque vous rĂ©organisez votre programme et que vous dĂ©placez du code d’un fichier Ă  l’autre. Lorsque cette option est donnĂ©e deux fois, la commande recherche en plus les copies depuis d’autres fichiers dans le commit qui crĂ©e le fichier. Lorsque cette option est donnĂ©e trois fois, la commande recherche Ă©galement des copies d’autres fichiers dans n’importe quel commit.

<num> est optionnel mais c’est la limite infĂ©rieure du nombre de caractĂšres alphanumĂ©riques que Git doit dĂ©tecter comme Ă©tant des dĂ©placements/copies entre fichiers pour qu’il puisse associer ces lignes au commit parent. Et la valeur par dĂ©faut est 40. S’il y a plus d’une option -C donnĂ©e, l’argument <num> du dernier -C prendra effet.

--ignore-rev <rév>

Ignorer les modifications apportĂ©es par la rĂ©vision lors de l’attribution de la responsabilitĂ©, comme si la modification ne s’était jamais produite. Les lignes qui ont Ă©tĂ© modifiĂ©es ou ajoutĂ©es par un commit ignorĂ© seront blĂąmĂ©es sur le commit prĂ©cĂ©dent qui a modifiĂ© cette ligne ou les lignes voisines. Cette option peut ĂȘtre spĂ©cifiĂ©e plusieurs fois pour ignorer plus d’une rĂ©vision. Si l’option de configuration blame.markIgnoredLines est activĂ©e, alors les lignes qui ont Ă©tĂ© modifiĂ©es par un commit ignorĂ© et attribuĂ©es Ă  un autre commit seront marquĂ©es avec un ? dans la sortie de blame. Si l’option de configuration blame.markUnblamableLines est dĂ©finie, alors les lignes touchĂ©es par un commit ignorĂ© que nous n’avons pas pu attribuer Ă  une autre rĂ©vision sont marquĂ©es d’un *. Dans les modes porcelaine, ignored et unblamable sont respectivement affichĂ©s.

--ignore-revs-file <fichier>

Ignorer les rĂ©visions listĂ©es dans le fichier, qui doit ĂȘtre au mĂȘme format qu’un fsck.skipList. Cette option peut ĂȘtre rĂ©pĂ©tĂ©e, et ces fichiers seront traitĂ©s aprĂšs tous les fichiers spĂ©cifiĂ©s avec l’option de configuration blame.ignoreRevsFile. Un nom de fichier vide, "", effacera la liste des rĂ©visions des fichiers prĂ©cĂ©demment traitĂ©s.

--color-lines

Colorier diffĂ©remment les annotations de ligne dans le format par dĂ©faut si elles proviennent du mĂȘme commit que la ligne prĂ©cĂ©dente. Cela permet de distinguer plus facilement les blocs de code introduits par des commits diffĂ©rents. La couleur par dĂ©faut est le cyan et peut ĂȘtre ajustĂ©e en utilisant l’option de configuration color.blame.repeatedLines.

--color-by-age

Colorer les annotations de ligne en fonction de l’ñge de la ligne dans le format par dĂ©faut. L’option de configuration color.blame.highlightRecent contrĂŽle quelle couleur est utilisĂ©e pour chaque tranche d’ñge.

-h

Afficher le message d’aide.

-c

Utiliser le mĂȘme mode de sortie que git-annotate[1] (DĂ©faut : dĂ©sactivĂ©).

--score-debug

Inclure les informations de dĂ©bogage relatives au dĂ©placement des lignes entre les fichiers (voir -C) et aux lignes dĂ©placĂ©es Ă  l’intĂ©rieur d’un fichier (voir -M). Le premier nombre listĂ© est le score. C’est le nombre de caractĂšres alphanumĂ©riques dĂ©tectĂ©s comme ayant Ă©tĂ© dĂ©placĂ©s entre ou dans des fichiers. Il doit ĂȘtre supĂ©rieur Ă  un certain seuil pour que git blame considĂšre que ces lignes de code ont Ă©tĂ© dĂ©placĂ©es.

-f
--show-name

Afficher le nom de fichier dans le commit original. Par dĂ©faut, le nom du fichier est affichĂ© s’il y a une ligne qui provient d’un fichier avec un nom diffĂ©rent, Ă  cause de la dĂ©tection des renommages.

-n
--show-number

Afficher le numéro de ligne dans le commit original (Défaut : off).

-s

Supprimer le nom de l’auteur et l’horodatage dans la sortie.

-e
--show-email

Montrer l’email de l’auteur au lieu du nom de l’auteur (Default : off). Ceci peut aussi ĂȘtre contrĂŽlĂ© par l’option de configuration blame.showEmail.

-w

Ignorer les espaces blancs lors de la comparaison de la version du parent et celle de l’enfant pour trouver d’oĂč viennent les lignes.

--abbrev=<n>

Au lieu d’utiliser les 7 +1 chiffres hexadĂ©cimaux par dĂ©faut comme nom d’objet abrĂ©gĂ©, utiliser <m>+1 chiffres, oĂč <m> est au moins <n> mais garantir que les noms d’objet de commit sont uniques. Notez qu’une colonne est utilisĂ©e pour un signe d’insertion pour marquer le commit limite.

LE FORMAT PAR DÉFAUT

Lorsque ni l’option --porcelain ni l’option --incremental ne sont spĂ©cifiĂ©es, git blame sortira une annotation pour chaque ligne avec :

  • nom d’objet abrĂ©gĂ© pour le commit d’oĂč provient la ligne ;

  • l’identifiant de l’auteur (par dĂ©faut, le nom de l’auteur et la date, sauf si -s ou -e est spĂ©cifiĂ©) ; et

  • numĂ©ro de ligne

avant le contenu de la ligne.

LE FORMAT PORCELAINE

Dans ce format, chaque ligne est sortie aprĂšs un en-tĂȘte ; l’en-tĂȘte au minimum a la premiĂšre ligne qui a :

  • SHA-1 de 40 octets du commit auquel la ligne est attribuĂ©e ;

  • le numĂ©ro de la ligne dans le fichier d’origine ;

  • le numĂ©ro de la ligne dans le fichier final ;

  • sur une ligne qui commence un groupe de lignes d’un commit diffĂ©rent du prĂ©cĂ©dent, le nombre de lignes dans ce groupe. Sur les lignes suivantes, ce champ est absent.

Cette ligne d’en-tĂȘte est suivie par les informations suivantes au moins une fois pour chaque commit :

  • le nom de l’auteur ("author"), le courriel ("author-mail"), l’heure ("author-time"), et le fuseau horaire ("author-tz") ; de mĂȘme pour le validateur.

  • le nom du fichier dans le commit auquel la ligne est attribuĂ©e.

  • la premiĂšre ligne du message de validation ("summary").

Le contenu de la ligne actuelle est affichĂ© aprĂšs l’en-tĂȘte ci-dessus, prĂ©fixĂ© par un TAB. Cela permet d’ajouter ultĂ©rieurement d’autres Ă©lĂ©ments d’en-tĂȘte.

Le format porcelaine supprime gĂ©nĂ©ralement les informations de commit qui ont dĂ©jĂ  Ă©tĂ© vues. Par exemple, deux lignes qui sont liĂ©es au mĂȘme commit seront toutes deux affichĂ©es, mais les dĂ©tails de ce commit ne seront affichĂ©s qu’une seule fois. Les informations spĂ©cifiques aux lignes individuelles ne seront pas regroupĂ©es, comme les rĂ©visions qui seront marquĂ©es « ignored » ou « unblamable ». Ceci est plus efficace, mais peut nĂ©cessiter de conserver plus d’information de contexte. C’est plus efficace, mais peut nĂ©cessiter que le lecteur conserve plus d’information en tĂȘte. L’option --line-porcelain peut ĂȘtre utilisĂ©e pour afficher toutes les informations de commit pour chaque ligne, permettant une utilisation plus simple (mais moins efficace) comme :

# compter le nombre de lignes attribuées à chaque auteur
git blame --line-porcelain file |
sed -n 's/^author //p' |
sort | uniq -c | sort -rn

SPÉCIFICATION DE PLAGES

Contrairement Ă  git blame et git annotate dans les anciennes versions de git, l’étendue de l’annotation peut ĂȘtre limitĂ©e Ă  la fois Ă  des plages de lignes et Ă  des plages de rĂ©visions. L’option -L, qui limite l’annotation Ă  une plage de lignes, peut ĂȘtre spĂ©cifiĂ©e plusieurs fois.

Lorsque vous souhaitez trouver l’origine des lignes 40-60 du fichier foo, vous pouvez utiliser l’option -L comme suit (elles signifient la mĂȘme chose — toutes deux demandent 21 lignes Ă  partir de la ligne 40) :

git blame -L 40,60 foo
git blame -L 40,+21 foo

Vous pouvez également utiliser une expression réguliÚre pour spécifier la plage de lignes :

git blame -L '/^sub hello {/,/^}$/' foo

qui limite l’annotation au corps de la sous-routine hello.

Lorsque vous n’ĂȘtes pas intĂ©ressĂ© par les changements plus anciens que la version v2.6.18, ou les changements plus anciens que 3 semaines, vous pouvez utiliser des spĂ©cificateurs d’intervalle de rĂ©vision similaires Ă  git rev-list :

git blame v2.6.18.. -- foo
git blame --since=3.weeks -- foo

Lorsque des spĂ©cificateurs de plage de rĂ©vision sont utilisĂ©s pour limiter l’annotation, les lignes qui n’ont pas Ă©tĂ© modifiĂ©es depuis la limite de l’intervalle (soit le commit v2.6.18 ou le commit le plus rĂ©cent qui date de plus de 3 semaines dans l’exemple ci-dessus) sont blĂąmĂ©es pour ce commit de limite de plage.

Un moyen particuliĂšrement utile est de voir si un fichier ajoutĂ© comporte des lignes créées par copier-coller Ă  partir de fichiers existants. Cela indique parfois que le dĂ©veloppeur a Ă©tĂ© nĂ©gligent et n’a pas refactorĂ© le code correctement. Vous pouvez d’abord trouver le commit qui a introduit le fichier avec :

git log --diff-filter=A --pretty=short -- foo

et ensuite annoter la modification entre le commit et ses parents, en utilisant la notation commit^! :

git blame -C -C -f $commit^! -- foo

SORTIE INCRÉMENTALE

Quand elle est appelĂ©e avec l’option --incremental, la commande affiche le rĂ©sultat au fur et Ă  mesure qu’il est construit. La sortie parle gĂ©nĂ©ralement des lignes touchĂ©es par les commits les plus rĂ©cents en premier (c’est-Ă -dire que les lignes seront annotĂ©es dans le dĂ©sordre) et est destinĂ©e Ă  ĂȘtre utilisĂ©e par des visionneurs interactifs.

Le format de sortie est similaire au format Porcelain, mais il ne contient pas les lignes réelles du fichier qui est annoté.

  1. Chaque entrée de blùme commence toujours par une ligne de :

    <sha1-hex-de-40-octets> <lignesource> <lignerésultat> <nombre-de-lignes>

    Les numéros de ligne comptent à partir de 1.

  2. La premiĂšre fois qu’un commit apparaĂźt dans le flux, diverses autres informations le concernant sont affichĂ©es avec une Ă©tiquette d’un mot au dĂ©but de chaque ligne dĂ©crivant les informations supplĂ©mentaires du commit (auteur, email, validateur, dates, rĂ©sumĂ©, etc.).

  3. Contrairement au format Porcelaine, l’information sur le nom de fichier est toujours donnĂ©e et termine l’entrĂ©e :

    "nom de fichier" <nom-de-fichier-avec-espaces-échappés-ici>

    et donc il est vraiment trĂšs facile Ă  analyser pour un analyseur orientĂ© lignes et mots (ce qui devrait ĂȘtre assez naturel pour la plupart des langages de script).

    Note
    Pour les personnes qui font de l’analyse syntaxique : pour la rendre plus robuste, il suffit d’ignorer toutes les lignes entre la premiĂšre et la derniĂšre (lignes "<sha1>" et "nom-de-fichier") oĂč vous ne reconnaissez pas les mots-clĂ©s (ou ne vous souciez pas de celui-lĂ  en particulier) au dĂ©but des lignes "informations Ă©tendues". De cette façon, s’il y a un jour des informations ajoutĂ©es (comme le codage du commit ou le commentaire Ă©tendu du commit), un visualisateur de blame ne s’en souciera pas.

TRANSFORMER LES AUTEURS

CONFIGURATION

Tout ce qui se trouve en dessous de cette ligne dans cette section est inclus de maniĂšre sĂ©lective Ă  partir de la documentation git-config[1]. Le contenu est le mĂȘme que celui qui s’y trouve :

Warning

Missing fr/config/blame.adoc

See original version for this content.

VOIR AUSSI

GIT

Fait partie de la suite git[1]

TRADUCTION

Cette page de manuel a été traduite par Jean-Noël Avila <jn.avila AT free DOT fr> et les membres du projet git-manpages-l10n. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le site https://github.com/jnavila/git-manpages-l10n .