Git
Français ▾ Topics ▾ Latest version ▾ git-show last updated in 2.27.0

NOM

git-show - Afficher différents types d’objets

SYNOPSIS

git show [<options>] [<objet>…​]

DESCRIPTION

Affiche un ou plusieurs objets (blobs, arbres, étiquettes et commits).

Pour les commits, il affiche le message de log et la différence textuelle. Il présente également le commit de fusion dans un format spécial comme produit par’git diff-tree --cc'.

Pour les étiquettes, il affiche le message de l’étiquette et les objets référencés.

Pour les arbres, il affiche les noms (équivalent à’git ls-tree' avec --name only).

Pour les blobs simples, il affiche le contenu simple.

La commande prend les options applicables à la commande’git diff-tree' pour contrôler comment les changements introduits par le commit sont affichés.

Cette page manuelle décrit uniquement les options les plus fréquemment utilisées.

OPTIONS

<objet>…​

Les noms des objets à afficher (par défaut:'HEAD'). Pour une liste plus complète des façons d’épeler les noms d’objets, voir la section "SPÉCIFIER LES RÉVISIONS" dans gitrevisions[7].

--pretty[=<format>]
--format=<format>

Formater le contenu des journaux de commits dans un format donné, où <format> peut être au choix parmi oneline, short, medium, full, fuller, reference, email, raw, format:<chaîne> et tformat:<chaîne>. Lorsque <format> n’est rien de ce qui précède, et qu’il contient'%format', il agit comme si --pretty=tformat:<format> était donné.

Voir la section "MISE EN FORME" pour plus de détails pour chaque format. Lorsque la partie'=<format>' est omise, la valeur par défaut est’medium'.

Note : vous pouvez spécifier le format par défaut dans la configuration du dépôt commit.cleanup (voir git-config[1]).

--abbrev-commit

Au lieu d’afficher le nom complet hexadécimal de 40 octets de l’objet commit, afficher seulement un préfixe partiel. Le nombre de chiffres peut être spécifié avec "--abbrev=<n>". (qui modifie également la sortie diff, si elle est affichée).

Cela devrait rendre "--pretty=online" beaucoup plus lisible pour les personnes utilisant des terminaux à 80 colonnes.

--no-abbrev-commit

Afficher le nom complet hexadécimal de 40 octets de l’objet commit. Ceci annule --abbrev-commit et les options qui l’impliquent telles que "--online". Elle remplace également la variable log.abbrevCommit.

--oneline

C’est un raccourci pour "--pretty=online --abbrev-commit" utilisés ensemble.

--encoding=<codage>

Les objets commit enregistrent l’encodage utilisé pour le message de log dans leur en-tête d’encodage ; cette option peut être utilisée pour indiquer à la commande de recoder le message de log du commit dans l’encodage préféré par l’utilisateur. Pour les commandes hors plomberie, cette valeur par défaut est UTF-8. Notez que si un objet prétend être encodé en X et que nous sortons en X, nous allons sortir l’objet à l’identique ; cela signifie que les séquences invalides dans la livraison originale peuvent être copiées dans la sortie.

--expand-tabs=<n>
--expand-tabs
--no-expand-tabs

Effectuer une extension de tabulation (remplacer chaque tabulation par suffisamment d’espaces pour remplir jusqu’à la colonne d’affichage suivante qui est multiple de'<n>') dans le message de journal avant de l’afficher dans la sortie. --expand-tabs est un raccourci pour --expand-tabs=8, et --no-expand-tabs est un raccourci pour --expand-tabs=0, qui désactive l’extension des tabulations.

Par défaut, les tabulations sont développées par les formatages qui indentent le message de log par 4 espaces (c’est-à-dire medium, qui est le format par défaut, full, fuller).

--notes[=<ref>]

Afficher les notes (voir git-notes[1]) qui annotent le commit, lors de l’affichage du message du journal de commit. C’est la valeur par défaut pour les commandes git log, git show et git whatchanged lorsqu’il n’y a pas d’option --pretty, --format ou --online sur la ligne de commande.

Par défaut, les notes affichées proviennent des références de notes listées dans les variables core.notesRef et notes.displayRef (ou les substitutions d’environnement correspondantes). Voir git-config[1] pour plus de détails.

Avec un argument optionnel'<ref>', utiliser la référence pour trouver les notes à afficher. La référence peut spécifier le nom complet de référence quand elle commence par refs/notes/ ; quand elle commence par notes/, refs/ et sinon refs/notes/ est préfixé pour former un nom complet de la référence.

Plusieurs options --notes peuvent être combinées pour contrôler quelles notes sont affichées. Exemples : "--notes=foo" affichera uniquement les notes de "refs/notes/foo" ; "--notes=foo --notes" affichera les notes de "refs/notes/foo" et des ref(s) de notes par défaut.

--no-notes

Ne pas afficher les notes. Ceci annule l’option --notes ci-dessus, en réinitialisant la liste des références de notes à partir desquelles les notes sont affichées. Les options sont analysées dans l’ordre donné sur la ligne de commande, par exemple "--notes --notes --notes=foo --no-notes --notes=bar" n’affichera que les notes "refs/notes/bar".

--show-notes[=<reférence>]
--[no-]standard-notes

Ces options sont obsolètes. Utilisez plutôt les options --notes/--no-notes ci-dessus.

--show-signature

Vérifier la validité d’un objet commit signé en passant la signature à ‘gpg --verify’ et afficher le résultat.

FORMATS AUTOMATIQUES

Si le commit est une fusion, et si la mise en forme n’est pas oneline, email ou raw, une ligne supplémentaire est insérée avant la ligne Author:. Cette ligne commence par "Merge:" et les empreintes des commits ancêtres sont affichées, séparées par des espaces. Notez que les commits énumérés ne sont pas nécessairement la liste des commits parents directs si vous avez limité votre vue de l’historique : par exemple, si vous n’êtes intéressé que par les modifications liées à un certain répertoire ou fichier.

Il existe plusieurs formats intégrés, et vous pouvez définir des formats supplémentaires en définissant une option pretty.<nom> config à soit un nouveau nom de format, soit une chaîne’format:', comme décrit ci-dessous (voir git-config[1]). Voici le détail des formats intégrés :

  • oneline

    <empreinte> <ligne de titre>

    C’est conçu pour être aussi compact que possible.

  • short

    commit <empreinte>
    Author: <auteur>
    <ligne de titre>
  • medium

    commit <empreinte>
    Author: <auteur>
    Date:   <date d'auteur>
    <ligne de titre>
    <message de validation complet>
  • full

    commit <empreinte>
    Author: <auteur>
    Commit: <validateur>
    <ligne de titre>
    <message de validation complet>
  • fuller

    commit <empreinte>
    Author:     <auteur>
    AuthorDate: <date d'auteur>
    Commit:     <validateur>
    CommitDate: <date de validation>
    <ligne de titre>
    <message de validation complet>
  • reference

    <empreinte abrégée> (<ligne de titre>, <courte date d'auteur>)

    Ce format est utilisé pour faire référence à un autre commit dans un message de validation et est le même que --pretty='format:%C(auto)%h (%s, %ad)'. Par défaut, la date est formatée avec --date=short à moins qu’une autre option --date ne soit explicitement spécifiée. Comme pour tout format: avec des espaces réservés de format, sa sortie n’est pas affectée par d’autres options comme --decorate et --walk-reflogs.

  • email

    From <empreinte> <date>
    From: <auteur>
    Date: <date d'auteur>
    Subject: [PATCH] <ligne de titre>
    <message de validation complet>
  • mboxrd

    Comme email, mais les lignes dans le message de validation commençant par "From" (précédé de zéro ou plus ">") sont citées avec ">" pour ne pas être confondues avec le début d’un nouveau commit.

  • raw

    Le format’raw' montre le commit entier telle qu’elle est stockée dans l’objet commit. Notamment, les empreintes sont affichées dans leur intégralité, que --abbrev ou --no-abbrev soient utilisés ou non, et l’information parents indiquent le véritable commit parent, sans tenir compte des greffes ou de la simplification d’historique. Notez que ce format affecte la façon dont les commits sont affichés, mais pas la façon dont la différence est affichée, par exemple avec git log --raw. Pour obtenir les noms complets des objets dans un format de diff brut, utilisez --no-abbrev.

  • format:<chaîne>

    Le format’format:<chaîne>' vous permet de spécifier quelles informations vous voulez afficher. Cela fonctionne un peu comme le format printf, à l’exception notable que vous obtenez une nouvelle ligne avec'%n' au lieu de'\n'.

    Par exemple,format : "L’auteur de %h était %an, %ar%nL’entête était >>%s<<<%n" afficherait quelque chose comme ceci :

    L'auteur de fe6e0ee était Junio C Hamano, 23 hours ago
    L'entête était >>t4119: test autocomputing -p<n> for traditional diff input.<<

    Les espaces réservés sont :

    • Les places qui s’étendent à un seul caractère littéral :

      %n

      retour à la ligne

      %%

      un % brut

      %x00

      afficher un octet à partir d’un code hexagonal

    • Espaces réservés qui affectent le formatage des espaces réservés ultérieurs :

      %Cred

      passe la couleur au rouge

      %Cgreen

      passe la couleur au vert

      %Cblue

      passe la couleur au bleu

      %Creset

      réinitialise la couleur

      %C(…​)

      la spécification de la couleur, comme décrit sous Valeurs dans la section section "FICHIER DE CONFIGURATION" de git-config[1]. Par défaut, les couleurs ne sont affichées que lorsqu’elles sont activées pour la sortie des journaux (par color.diff, color.ui, ou --color, et en respectant les paramètres auto du premier si nous allons sur un terminal). %C(auto,...) est accepté comme synonyme historique de la valeur par défaut (par exemple, %C(auto,red)). Spécifier %C(always,...) affichera les couleurs même si la couleur n’est pas activée autrement (bien qu’il faille toujours utiliser --color=always pour activer la couleur pour toute la sortie, y compris ce format et tout ce que git peut colorier). auto seul (c’est-à-dire %C(auto)) activera la coloration automatique sur les places suivantes jusqu’à ce que la couleur soit à nouveau changée.

      %m

      marque à gauche (<), à droite (>) ou de limite (-)

      %w([<w>[,<i1>[,<i2>]]])

      basculer les retours à la ligne, à l’instar de l’option-w de git-shortlog[1].

      %<(<N>[,tronq|tronqg|tronqm])

      faire le prochain espace réservé prendre au moins N colonnes, en remplissant les espaces à droite si nécessaire. Au choix, tronquer au début (tronqg), au milieu (tronqm) ou à la fin (tronq) si la sortie est plus longue que N colonnes. Notez que la troncation ne fonctionne correctement qu’avec N >= 2.

      %<|(<N>)

      faire le prochain espace réservé prendre au moins jusqu’au Nième colonnes, en insérant des espaces à droite si nécessaire

      %>(<N>), %>|(<N>)

      similaire à %<(<N>), %<|(<N>) respectivement, mais en insérant des espaces à gauche

      %>>(<N>), %>>|(<N>)

      similaire à %>(<N>), %>|(<N>) respectivement, sauf que si le prochain espace réservé prend plus d’espaces que prévu et qu’il y a des espaces à sa gauche, utiliser ces espaces

      %><(<N>), %><|(<N>)

      similaire à %<(<N>), %<|(<N>) respectivement, mais en calant des deux côtés (c’est-à-dire que le texte est centré)

    • Espaces réservés développant les informations extraites du commit :

      %H

      empreinte du commit

      %h

      empreinte abrégée du commit

      %T

      empreinte de l’arbre

      %t

      empreinte abrégée de l’arbre

      %P

      empreintes des parents

      %p

      empreintes abrégés des parents

      %an

      nom de l’auteur

      %aN

      nom de l’auteur (en respectant .mailmap, voir git-shortlog[1] ou git-blame[1])

      %ae

      e-mail de l’auteur

      %aE

      e-mail de l’auteur (en respectant .mailmap, voir git-shortlog[1] ou git-blame[1])

      %al

      partie locale de l’e-mail de l’auteur (la partie avant le signe "@")

      %aL

      partie locale de l’auteur (voir %al) en respectant le fichier .mailmap, voir git-shortlog[1] ou git-blame[1])

      %ad

      date de l’auteur (le format respecte l’option --date=)

      %aD

      date d’auteur, style RFC2822

      %ar

      date de l’auteur, date relative

      %at

      date de l’auteur, horodatage UNIX

      %ai

      date de création, format de type ISO 8601

      %aI

      date d’auteur, format strict ISO 8601

      %as

      date d’auteur, format court (AAAA-MM-JJ)

      %cn

      nom du validateur

      %cN

      nom du validateur (en respectant .mailmap, voir git-shortlog[1] ou git-blame[1])

      %ce

      e-mail du validateur

      %cE

      e-mail du validateur (en respectant .mailmap, voir git-shortlog[1] ou git-blame[1])

      %cl

      partie locale de l’e-mail de l’auteur (la partie avant le signe "@")

      %cL

      partie locale de l’auteur (voir %cl) en respectant .mailmap, voir git-shortlog[1] ou git-blame[1])

      %cd

      date de validation (le format respecte l’option --date=)

      %cD

      date de validation, style RFC2822

      %cr

      date de validation, date relative

      %ct

      date de validation, horodatage UNIX

      %ci

      date de validation, format de type ISO 8601

      %cI

      date de validation, format ISO 8601 strict

      %cs

      date de validation, format court (AAAA-MM-JJ)

      %d

      les noms de ref, comme l’option --decorate de git-log[1].

      %D

      les noms des refs, sans encadrement par « ( » et « ) ».

      %S

      nom de ref fourni en ligne de commande par lequel le commit a été atteint (comme git log --source), ne fonctionne qu’avec git log

      %e

      encodage

      %s

      titre

      %f

      ligne de titre aseptisée, convenant pour un nom de fichier

      %b

      corps

      %B

      corps brut (sujet et corps non enveloppés)

      %N

      notes du commit

      %GG

      message de vérification brut de GPG pour un commit signé

      %G?

      afficher "G" pour une bonne signature (valide), "B" pour une mauvaise signature, "U" pour une bonne signature avec une validité inconnue, "X" pour une bonne signature qui a expiré, "Y" pour une bonne signature faite par une clé expirée, "R" pour une bonne signature faite par une clé révoquée, "E" si la signature ne peut pas être vérifiée (par exemple la clé est manquante) et "N" pour aucune signature

      %GS

      affiche le nom du signataire d’un commit signé

      %GK

      afficher la clé utilisée pour signer un commit signé

      %GF

      afficher l’empreinte digitale de la clé utilisée pour signer un commit signé

      %GP

      afficher l’empreinte digitale de la clé primaire dont la sous-clé a été utilisée pour signer un commit signé

      %GT

      afficher le niveau de rouille de la clé utilisée pour signer un commit signé

      %gD

      sélecteur de reflog, par exemple, refs/stash@{1}` ou refs/stash@{2 minutes ago} ; le format suit les règles décrites pour l’option -g'. La partie avant `@' est le refname tel qu'il est donné sur la ligne de commande (donc `git log -g refs/heads/master produirait refs/heads/master@{0}).

      %gd

      sélecteur de reflog raccourci ; identique à %gD', mais la partie du nom du reflog est raccourcie pour la lisibilité humaine (ainsi `refs/heads/master devient simplement master).

      %gn

      nom de l’identité reflog

      %gN

      nom de l’identité du reflog (en respectant le fichier.mailmap, voir git-shortlog[1] ou git-blame[1])

      %ge

      adresse de courriel d’identité reflog

      %gE

      adresse de courriel de l’identité reflog (en respectant le fichier .mailmap, voir git-shortlog[1] ou git-blame[1])

      %gs

      titre du reflog

      %(trailers[:options])

      afficher les lignes d’attribut du corps comme interprétés par git-interpret-trailers[1]. La chaîne trailers peut être suivie de deux-points et de zéro ou plus d’options séparées par des virgules :

      • key=<K>' : affiche uniquement les chaînes d’attributs avec la clé spécifiée. L’appariement se fait de façon insensible à la casse et la virgule finale est facultative. Si l’option est donnée plusieurs fois, les lignes d’attributs correspondant à l’une des clés sont affichées. Cette option active automatiquement l’option only de sorte que les lignes non-attribut dans le bloc d’attributs soient masquées. Si ce n’est pas désiré, ce peut être désactivé avec only=false. Par exemple, %(trailers:key=Reviewed-by) affiche les lignes d’attribut avec la clé Reviewed-by.

      • only[=val] : permet de sélectionner si les lignes non-attribut du bloc d’attributs doivent être incluses. Le mot-clé only peut être éventuellement suivi d’un signe égal et d’une valeur true, on, yes pour omettre ou false, off, no pour afficher les lignes non-attribut. Si l’option est donnée sans valeur, elle est activée. Si elle est donnée plusieurs fois, la dernière valeur est utilisée.

      • separator=<SEP> : spécifie un séparateur inséré entre les lignes d’attributs. Lorsque cette option n’est pas activée, chaque ligne d’attribut est terminée par un caractère de saut de ligne. La chaîne SEP peut contenir les codes de formatage littéral décrits ci-dessus. Pour utiliser la virgule comme séparateur, il faut utiliser %x2C car sinon elle serait analysée comme option suivante. Si l’option séparateur est donnée plusieurs fois, seule la dernière est utilisée. Par exemple, %(trailers:key=Ticket,separator=%x2C ) affiche toutes les lignes d’attributs dont la clé est « Ticket » séparées par une virgule et un espace.

      • unfold[=val] : se comporter comme si l’option --unfold d’interprétation des attributs était donnée. De la même manière que pour only, il peut être suivi d’un signe égal et d’une valeur explicite. Par exemple, %(trailers:only,unfold=true) déplie et affiche toutes les lignes d’attributs.

      • valueonly[=val] : sauter la partie clé de la ligne d’attribut et n’afficher que la partie valeur. Ceci permet aussi optionnellement une valeur explicite.

Note
Certains espaces réservés peuvent dépendre d’autres options données au moteur de traversée de révisions. Par exemple, les options de reflog %g* inséreront une chaîne vide à moins que nous ne traversions des entrées de reflog (par exemple, par git log -g). Les caractères de remplissage %d et %D utiliseront le format de décoration « short » si --decorate n’a pas déjà été fourni sur la ligne de commande.

Si vous ajoutez un + (signe plus) après'%' d’un espace réservé, un saut de ligne est inséré immédiatement avant l’expansion si et seulement si l’espace réservé se développe en une chaîne non vide.

Si vous ajoutez un - (signe moins) après'%' d’un caractère de remplissage, tous les sauts de ligne consécutifs précédant immédiatement l’expansion sont supprimés si et seulement si l’espace réservé se développe en une chaîne vide.

Si vous ajoutez un ‘`(espace) après’%' d’un espace réservé, un espace est inséré immédiatement avant l’expansion si et seulement si l’espace réservé se développe en une chaîne non vide.

  • tformat:

    Le format’tformat:' fonctionne exactement comme’format:', sauf qu’il fournit une sémantique « terminator » au lieu de « separator ». En d’autres termes, chaque commit a le caractère de fin de message (habituellement une nouvelle ligne) ajouté, plutôt qu’un séparateur placé entre les entrées. Cela signifie que l’entrée finale d’un format à une ligne se terminera correctement par une nouvelle ligne, tout comme le format "oneline". Par exemple :

    $ git log -2 --pretty=format:%h 4da45bef \
      | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
    4da45be
    7134973 -- NO NEWLINE
    
    $ git log -2 --pretty=tformat:%h 4da45bef \
      | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
    4da45be
    7134973

    De plus, toute chaîne non reconnue qui contient un % est interprétée comme si elle avait tformat: devant elle. Par exemple, ces deux éléments sont équivalents :

    $ git log -2 --pretty=tformat:%h 4da45bef
    $ git log -2 --pretty=%h 4da45bef

OPTIONS COMMUNES DE DIFF

-p
-u
--patch

Générer un correctif (voir section sur la génération de correctifs).

-s
--no-patch

Supprimer la sortie diff. Utile pour les commandes telles que git show qui affichent la rustine par défaut, ou pour supprimer l’effet de --patch.

-U<n>
--unified=<n>

Générer des diffs avec <n> lignes de contexte au lieu des trois habituelles. Implique --patch. Implique -p.

--output=<fichier>

Sortie vers un fichier spécifique au lieu de stdout.

--output-indicator-new=<caractère>
--output-indicator-old=<caractère>
--output-indicator-context=<caractère>

Spécifier le caractère utilisé pour indiquer les lignes nouvelles, anciennes ou contextuelles dans la rustine générée. Normalement, il s’agit de +, - et ' ' respectivement.

--raw

Pour chaque commit, afficher un résumé des modifications en format de diff brut. Voir la section « FORMAT DE SORTIE BRUT » de git-diff[1]. C’est différent de l’affichage du journal en format brut, que vous pouvez obtenir avec --format=raw.

--patch-with-raw

Synonyme de -p --raw.

--indent-heuristic

Activer l’heuristique qui décale les limites des sections de diff pour rendre les rustines plus faciles à lire. C’est l’option par défaut.

--no-indent-heuristic

Désactiver l’heuristique d’indentation.

--minimal

Passer plus de temps pour s’assurer que le diff le plus petit possible est produit.

--patience

Générer un diff en utilisant l’algorithme « patience diff ».

--histogram

Générer un diff en utilisant l’algorithme « diff histogramme ».

--anchored=<texte>

Générer un diff en utilisant l’algorithme « diff ancré ».

Cette option peut être spécifiée plus d’une fois.

Si une ligne existe dans la source et la destination, n’existe qu’une seule fois, et démarre avec ce texte, cet algorithme tente d’empêcher qu’elle apparaisse comme une suppression ou une addition dans la sortie. L’algorithme « patience diff » est utilisé en interne.

--diff-algorithm={patience|minimal|histogram|myers}

Choisir un algorithme de diff. Les variantes sont comme suit :

default, myers

L’algorithme de diff avide. C’est actuellement celui par défaut.

minimal

Passer plus de temps pour s’assurer que le diff le plus petit possible est produit.

patience

Utiliser l’algorithme « patience diff » pour la génération de rustine.

histogram

Cet algorithme étend l’algorithme patience pour « supporter les éléments communs de faible fréquence ».

Par exemple, si vous avez configuré la variable diff.algorithm à une valeur autre que celle par défaut et souhaitez utiliser la valeur par défaut, alors vous devez utiliser l’option --diff-algorithm=default.

--stat[=<largeur>[,<largeur-de-nom>[,<nombre>]]]

Générer un diffstat. Par défaut, autant d’espace que nécessaire sera utilisé pour la partie du nom de fichier et le reste pour la partie de graphe. La largeur maximum est par défaut la largeur du terminal, ou 80 colonnes si non connecté à un terminal, et peut être outrepassé avec <largeur>. La largeur du nom de fichier peut être limitée en fournissant une autre largeur <largeur-de-nom> après une virgule. La largeur de la partie du graphe peut être limitée en utilisant --stat-graph-width=<largeur> (affecte toutes les commandes générant un graphe de stat) ou en réglant diff.statGraphWidth=<largeur> (n’affecte pas git format-patch). En ajoutant un troisième paramètre <nombre>, vous pouvez limiter la sortie aux premières <nombre> lignes, suivies de ... s’il y en a plus.

Ces paramètres peuvent aussi être positionnés individuellement avec --stat-width=<largeur>, --stat-name-width=<largeur-de-nom> et --stat-count=<nombre>.

--compact-summary

Afficher un résumé condensé de l’information d’entête étendu telle que les créations ou les suppressions de fichier (« nouveau » ou « disparu », optionnellement « +l » si c’est un lien symbolique) et les modifications de mode (« +x » ou « -x » pour l’ajout et la suppression du bit exécutable respectivement) dans le diffstat. L’information est affichée entre la partie nom de fichier et la partie graphe. Implique --stat.

--numstat

Similaire à --stat, mais afficher le nombre de lignes ajoutées ou supprimées en notation décimale et le nom de chemin sans abréviation, pour le rendre plus facile à traiter automatiquement. Pour les fichiers binaires, affiche deux - au lieu de 0 0.

--shortstat

N’affiche que la dernière ligne du format --stat contenant le nombre total de fichiers modifiés, de même que le nombre de lignes ajoutées et supprimées.

-X[<param1,param2,…​>]
--dirstat[=<param1,param2,…​>]

Afficher la distribution de la quantité relative de modifications pour chaque sous-répertoire. Le comportement de --dirstat peut être personnalisé en lui passant une liste de paramètres séparés par des virgules. Les valeurs par défaut sont contrôlées par la variable de configuration diff.dirstat (voir git-config[1]). Les paramètres suivants sont disponibles :

changes

Calculer les valeurs de dirstat en comptant les lignes supprimées de la source ou ajoutées dans la destination. Ceci ignore la quantité de purs mouvements de code dans un fichier. En d’autres termes, le réarrangement de lignes dans un fichier n’est pas compté autant que les autres modifications. C’est le comportement par défaut quand aucun paramètre n’est fourni.

lines

Calculer les valeurs dirstat en faisant l’analyse diff normal par ligne, et en additionnant les totaux de lignes ajoutées/supprimées. (Pour les fichiers binaires, compter plutôt les sections de 64 octets, puisque les fichiers binaires n’ont pas de concept de ligne). C’est un comportement de --dirstat plus onéreux que le comportement changes, mais il compte les lignes réarrangées dans un fichier autant que les autres modifications. La sortie résultante est cohérente avec ce que vous obtiendriez avec d’autres options --*stat.

files

Calculer les valeurs dirstat en comptant le nombre de fichiers changés. Chaque fichier modifié compte de façon égale dans l’analyse dirstat. C’est le comportement --dirstat le moins cher en termes de calcul, puisqu’il n’a pas du tout besoin d’analyser le contenu du fichier.

cumulative

Compter les modifications dans un répertoire enfant pour le répertoire parent. Notez qu’en utilisant cumulative, la somme des pourcentages constatés peut dépasser 100 %. Le comportement par défaut (non cumulatif) peut être spécifié avec le paramètre noncumulative.

<limite>

Un paramètre entier qui spécifie un pourcentage limite (3% par défaut). Les répertoires contribuant moins que ce pourcentage de modifications ne sont pas affichés dans la sortie.

Exemple : ce qui suit va compter les fichiers modifiés, tout en ignorant les répertoires qui contiennent moins de 10 % de la quantité totale de fichiers modifiés et en accumulant les totaux des répertoires enfants dans les répertoires parents : --dirstat=files,10,cumulative.

--cumulative

Synonyme de --dirstat=cumulative

--dirstat-by-file[=<param1,param2>…​]

Synonyme de --dirstat=files,param1,param2…​.

--summary

Afficher un résumé condensé d’information d’entête étendu tel que les créations, les renommages et les modifications de mode.

--patch-with-stat

Synonyme de -p --stat.

-z

Séparer les commits avec des NULs au lieu de retours chariot.

Aussi, quand --raw ou --numstat ont été fournis, ne pas modifier les noms de chemins et utiliser des NULs comme terminateurs de champs.

Sans cette option, les noms de chemin avec des caractères « inhabituels » sont cités comme expliqué pour la variable de configuration core.quotePath (voir git-config[1]).

--name-only

N’afficher que les noms des fichiers modifiés.

--name-status

N’afficher que les noms et statuts des fichiers modifiés. Voir la description de l’option --diff-filter pour la signification des lettres de statut.

--submodule[=<format>]

Spécifier comment les différences dans les sous-modules sont affichées. Lorsque vous spécifiez --submodule=short, le format short (court) est utilisé. Ce format n’affiche que le nom des commits du début et de la fin de la plage. Quand --submodule ou --submodule=log est spécifié, le format log (journal) est utilisé. Ce format liste les commits dans la plage comme le fait summary de git-submodule[1]. Quand --submodule=diff est spécifié, le format diff est utilisé. Ce format affiche une diff en ligne des modifications dans le sous-module pour la plage de commits. Vaut par défaut diff.submodule ou le format short si l’option de configuration n’est pas renseignée.

--color[=<quand>]

Afficher des diff colorés. --color (sans =<quand>) est identique à --color=always. <quand> peut être always, never ou auto.

--no-color

Désactiver les diff colorés. C’est identique à --color=never.

--color-moved[=<mode>]

Les lignes de code déplacées sont colorées différemment. Le <mode> vaut par défaut no si l’option n’est pas fournie et zebra si l’option est fournie sans mode. Le mode est une valeur parmi :

no

Les lignes déplacées ne sont pas surlignées.

default

C’est un synonyme de zebra. Cela peut changer pour un mode plus raisonnable dans le futur.

plain

Toute ligne qui est ajoutée à un endroit et supprimée à un autre endroit sera colorée avec color.diff.newMoved. Similairement color.diff.oldMoved sera utilisé pour les lignes retirées qui ont été ajoutées ailleurs dans le diff. Ce mode prend n’importe quelle ligne déplacée, mais il n’est pas très utile dans une revue pour déterminer si un bloc de code a été déplacé sans permutation.

blocks

Les blocs de texte déplacé d’au moins 20 caractères alphanumériques sont détectés avidement. Les blocs détectés sont peints avec les couleurs color.diff.oldMoved pour l’ancienne place et color.diff.newMoved pour la nouvelle place. Les blocs adjacents ne peuvent pas être différenciés.

zebra

Les blocs de texte déplacé sont détectés comme dans le mode blocks. Les blocs sont peints en utilisant la couleur color.diff.{old,new}Moved ou color.diff.{old,new}MovedAlternative. La différence entre les deux couleurs indique qu’un nouveau bloc a été détecté.

dimmed-zebra

Similaire à zebra, mais avec une limitation supplémentaire des parties inintéressantes du code déplacé. Les lignes de frontière de deux blocs adjacents sont considérées intéressantes, le reste est inintéressant. dimmed_zebra est un synonyme déconseillé.

--no-color-moved

Désactiver la détection de déplacement. Ce peut être utilisé pour outrepasser les réglages de configuration. C’est comme --color-moved=no.

--color-moved-ws=<modes>

Ceci configure comment les espaces sont ignorés lors de la détection de déplacement par --color-moved. Ces modes peuvent être fournis comme une liste séparée par des virgules :

no

Ne pas ignorer les espaces lors de la détection de déplacement.

ignore-space-at-eol

Ignorer les modifications d’espaces en fin de ligne.

ignore-space-change

Ignorer les modifications de nombre d’espaces. Cela ignore les espaces en fin de ligne et considère toutes les autres séquences d’un caractère blanc ou plus comme équivalentes.

ignore-all-space

Ignorer les espaces lors de la comparaison de lignes. Ceci ignore les différences même si une ligne a des espaces quand l’autre n’en a aucun.

allow-indentation-change

Ignorer initialement tout espace lors de la détection de déplacement, puis grouper les blocs de code déplacé dans un bloc si la modification de blancs est identique par ligne. C’est incompatible avec les autres modes.

--no-color-moved-ws

Ne pas ignorer les blancs lors de la détection de déplacement. Ceci peut être utilisé pour outrepasser les réglages de configuration. C’est identique à --color-moved-ws=no.

--word-diff[=<mode>]

Afficher un diff par mot, en utilisant le <mode> pour délimiter les mots modifiés. Par défaut, les mots sont délimités par des espaces ; voir --word-diff-regex ci-dessous. Le <mode> vaut par défaut plain, et peut valoir :

color

Surligner les mots modifiés en n’utilisant que des couleurs. Implique --color.

plain

Afficher les mots comme [-supprimé-] et {+ajouté+}. Ne pas tenter d’échapper ces délimiteurs s’ils apparaissent dans l’entrée, donc la sortie peut être ambigüe.

porcelain

Utiliser un format spécial ligne par ligne destiné à la consommation par script. Les séquences ajoutées/supprimées/non-modifiées sont affichées dans le format diff unifié habituel, commençant par un caractère +/-/` ` en début de ligne et en étendant en fin de ligne. Les retours chariot dans l’entrée sont représentés par un tilde ~ sur une ligne à part.

none

Désactiver à nouveau la diff par mots.

Notez qu’en dépit du nom du premier mode, la couleur est utilisée pour surligner les parties modifiées dans tous les modes, si activée.

--word-diff-regex=<regex>

Utiliser <regex> pour décider ce qu’est un mot, au lieu de définir un mot comme une séquence continue de caractères non blancs. Implique aussi --word-diff à moins qu’elle ait déjà été spécifiée.

Toutes correspondances de <regex> qui ne se chevauchent pas sont considérées comme des mots. Tout ce qui se situe entre ces correspondances est considéré comme de l’espace blanc et ignoré (!) lors du calcul de différences. Vous voudrez peut-être ajouter |[^[:space:]] à l’expression régulière pour être sûr qu’elle englobe tous les caractères non blancs. Une correspondance qui contient un retour à la ligne est tronquée silencieusement (!) au retour à la ligne.

Par exemple, --word-diff-regex=. va traiter chaque caractère comme un mot et de ce fait présenter les différences caractère par caractère.

La regex peut aussi être indiquée par un pilote de diff ou une option de configuration, voir gitattributes[5] ou git-config[1]. La ligne de commande a précédence sur le pilote de diff ou la configuration. Le pilote de diff a précédence sur l’option de configuration.

--color-words[=<regex>]

Équivalent à --word-diff=color plus (si une regex a été spécifiée) --word-diff-regex=<regex>.

--no-renames

Désactiver la détection de renommage, même si le fichier de configuration indique de le faire par défaut.

--[no-]rename-empty

S’il faut utiliser les blobs vides comme source de renommage.

--check

Avertir si les modifications introduisent des marqueurs de conflit ou des erreurs d’espaces. Les erreurs d’espaces sont définies par l’option de configuration core.whitespace. Par défaut, les espaces en fin de ligne (incluant les lignes ne contenant que des espaces) et le caractère espace suivi immédiatement par une tabulation lors d’une indentation initiale de ligne sont considérés comme des erreurs d’espace. Le code d’erreur de sortie est non nul en cas de problèmes trouvés. Non compatible avec --exit-code.

--ws-error-highlight=<sorte>

Surligner les erreurs d’espace dans les lignes context (contexte), old (ancien) et new (nouveau) du diff. Des valeurs multiples sont séparées par des virgules, none réinitialise les valeurs précédentes, default réinitialise la liste à new et all est un raccourci pour old,new,context. Quand cette option n’est pas fournie et que la variable de configuration diff.wsErrorHighlight n’est pas assignée, seules les erreurs d’espace dans les lignes new sont surlignées. Les erreurs d’espace sont colorées avec color.diff.whitespace.

--full-index

Au lieu de montrer quelques-uns des premiers caractères, montrer les noms complets des objets blob des images pré et post sur la ligne d’index lors de la génération de la sortie au format patch.

--binary

En plus de --full-index, afficher un diff binaire qui peut être appliqué avec git-apply. Implique --patch.

--abbrev[=<n>]

Au lieu de montrer le nom de l’objet avec les 40 caractères hexadécimaux dans le format de diff brut et les lignes d’entête de l’arbre de diff, ne montrer qu’un préfixe partiel. C’est indépendant de l’option --full-index ci-dessus, qui contrôle le format de sortie de la rustine diff. Un nombre de chiffres différent de celui par défaut peut être spécifié avec --abbrev=<n>.

-B[<n>][/<m>]
--break-rewrites[=[<n>][/<m>]]

Casser les modifications de réécriture complète en paires de suppression et création. Cela sert deux objectifs :

Cela affecte la façon dont un changement qui équivaut à une réécriture totale d’un fichier apparaît non pas comme une série de suppressions et d’insertions mélangées avec quelques lignes qui (par hasard) correspondent entre les deux versions comme contexte, mais comme une simple suppression de tout ce qui est ancien suivi d’une simple insertion de tout ce qui est nouveau, et le nombre m contrôle cet aspect de l’option -B (par défaut 60 %). -B/70% spécifie que moins de 30 % de l’original doit rester dans le résultat pour que Git le considère comme une réécriture totale (autrement, la rustine résultante sera une série de suppressions et d’insertions mélangées avec des lignes de contexte).

Utilisé avec -M, un fichier complètement réécrit est aussi considéré comme la source d’un renommage (habituellement -M ne considère que les fichiers qui ont disparu comme source de renommage), et le nombre n contrôle le niveau de l’option -B (par défaut, 50 %). -B20% signifie qu’une modification avec des additions et des suppressions représentant 20 % ou plus du contenu du fichier est considérée pour être utilisée comme une source possible pour un renommage en un autre fichier.

-M[<n>]
--find-renames[=<n>]

Si des diffs sont générés, détecter et afficher les renommages pour chaque commit. Pour suivre les fichiers au fil des renommages qui apparaissent dans l’historique, voir --follow. Si n est spécifié, c’est un seuil d’index de similarité (c-à-d la quantité d’addition/suppression comparé à la taille du fichier). Par exemple, -M90% signifie que Git considérera un couple suppression/ajout comme renommage si plus de 90 % du fichier n’a pas changé. Sans le signe %, le nombre doit être lu comme une fraction précédée du point décimal. -M5 devient 0,5, tout comme -M50%. De même, -M05 est identique à -M5%. Pour limiter la détection à des renommages exacts, utilisez -M100%. L’index de similarité par défaut est 50%.

-C[<n>]
--find-copies[=<n>]

Détecter les copies aussi bien que les renommages. Voir aussi --find-copies-harder. Si n est spécifié, il a la même signification que pour -M<n>.

--find-copies-harder

Pour des raisons de performance, par défaut, l’option -C trouve des copies seulement si le fichier original de la copie a été modifié dans le même ensemble de modifications. Ce drapeau fait inspecter à la commande les fichiers non modifiés comme candidats comme source de copie. C’est une opération très chère pour des projets importants, donc à utiliser avec précaution. Spécifier plusieurs fois l’option -C a le même effet.

-D
--irreversible-delete

Omettre la pré-image pour des suppressions, c-à-d n’afficher que l’entête mais pas la diff entre la pré-image et /dev/null. La rustine résultante n’est pas destinée à être appliquée avec patch ou git apply  ; C’est seulement pour les personnes qui veulent juste se concentrer sur une revue des modifications. De plus, la sortie manque clairement d’assez d’information pour appliquer la rustine en inverse, même manuellement, d’où le nom de l’option.

Lorsqu’utilisé conjointement avec -B, omettre aussi la pré-image dans la partie suppression d’une paire suppression/création.

-l<num>

Les options -M et -C nécessitent un temps de traitement en O(n²) où n est le nombre de cibles potentielles renommage/copie. Cette option empêche l’utilisation de la détection de renommage/copie si le nombre de cibles de renommage/copie excède le nombre indiqué.

--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

Sélectionner seulement les fichiers qui sont Ajoutés (A), Copiés (C), supprimés (Deleted D), Modifiés (M), Renommés (R), ont eu un changement de Type (T) (c-à-d fichier normal, lien symbolique, sous-module …), sont non fusionnés (Unmerged U), sont inconnus (Unknown X) ou ont eu leur appairage cassé (Broken B). Toute combinaison de caractères de filtre (incluant aucun) peut être utilisée. Quand * (Tout-ou-rien) est ajouté à la combinaison, tous les chemins sont sélectionnés s’il y a des fichiers qui correspondent aux autres critères dans la comparaison ; s’il n’y a aucun fichier qui correspond aux autres critères, rien n’est sélectionné.

Aussi, ces lettres majuscules peuvent être spécifiées en minuscules pour exclure. Par exemple, --diff-filter=ad exclut les chemins ajoutés et supprimés.

Notez que toutes les diffs ne peuvent pas présenter tous les types. Par exemple, les diffs de l’index par rapport à l’arbre de travail ne peuvent jamais avoir des entrées Ajoutées (parce que l’ensemble des chemins inclus dans le diff est limité par ce qui est présent dans l’index). Similairement, les entrées copiées et renommées ne peuvent pas apparaître si la détection de ces types est désactivée.

-S<chaîne>

Trouver des différences qui modifient le nombre d’occurrences de la chaîne spécifiée (par ex. addition/suppression) dans un fichier. Destiné à l’usage dans des scripts.

C’est utile lorsqu’on cherche un bloc exact de code (comme une struct), et qu’on veut connaître l’historique de ce bloc depuis son apparition : utiliser cette fonctionnalité itérativement pour fournir le bloc d’une pré-image à -S et continuer jusqu’à obtenir la toute première version du bloc.

Les fichiers binaires sont aussi analysés.

-G<regex>

Rechercher des différences dont le texte de rustine contient les lignes ajoutées/supprimées correspondant à <regex>.

Pour illustrer la différence entre -S<regex> --pickaxe-regex et -G<regex>, considérons un commit contenant la diff suivante dans un même fichier :

+    return frotz(nitfol, two->ptr, 1, 0);
...
-    hit = frotz(nitfol, mf2.ptr, 1, 0);

Alors que git log -G"frotz\(nitfol" affichera ce commit, git log -S"frotz\(nitfol" --pickaxe-regex ne l’affichera pas (parce que le nombre d’occurrences de cette chaîne n’a pas changé).

À moins que --text soit fourni, les rustines de fichiers binaires sans filtre textconv seront ignorées.

Voir l’entrée pickaxe dans gitdiffcore[7] pour plus d’information.

--find-object=<id-objet>

Rechercher les différences qui modifient le nombre d’occurrences de l’objet indiqué. Similaire à -S, juste que l’argument est différent en ce qu’elle ne cherche pas une chaîne particulière mais un identifiant d’objet particulier.

L’objet peut être un commit de blob ou de sous-module. Cela implique l’option -t dans git-log pour trouver aussi des arbres.

--pickaxe-all

Quand -S ou -G trouvent une modification, afficher toutes les modifications dans l’ensemble de modifications, pas seulement les fichiers qui contiennent la modification dans <chaîne>.

--pickaxe-regex

Traiter la <chaîne> fournie à -S comme une expression régulière POSIX étendue à faire correspondre.

-O<fichier-d-ordre>

Contrôler l’ordre dans lequel les fichiers apparaissent dans la sortie. Ceci passe outre la variable de configuration diff.orderFile (voir git-config[1]). Pour annuler diff.orderFile, utiliser -O/dev/null.

L’ordre en sortie est déterminé par l’ordre des motifs glob dans <fichier-d-ordre>. Tous les fichiers dont le nom de chemin correspond au premier motif sont affichés en premier, tous les fichiers dont le nom de chemin correspond au second motif (mais pas au premier) sont affichés ensuite, et ainsi de suite. Tous les fichiers dont les noms de chemin qui ne correspondent à aucun motif sont affichés en dernier, comme s’il y avait un motif ramasse-tout à la fin du fichier. Si de multiples noms de chemin ont le même rang (ils correspondent avec le même motif mais pas de motifs antérieurs), leur ordre relatif d’affichage est l’ordre normal.

<fichier-d-ordre> est analysé comme suit :

  • Les lignes blanches sont ignorées, de sorte qu’elles peuvent être utilisées comme séparateurs pour la lisibilité.

  • Les lignes commençant par un dièse ("#") sont ignorées, elles peuvent donc être utilisées comme commentaires. Ajoutez une barre oblique inverse ("\") au début du motif s’il doit commencer par un dièse.

  • Toutes les autres lignes contiennent un motif unique.

Les motifs ont la même syntaxe et sémantique que les motifs utilisés pour fnmatch(3) sans le drapeau FNM_PATHNAME, sauf qu’un nom de chemin correspond aussi à un motif si la suppression de n’importe quel nombre de composants finaux du nom de chemin correspond au motif. Par exemple, le motif "foo*bar" correspond à "fooasdfbar" et "foo/bar/baz/asdf" mais pas à "foobarx".

-R

Échanger deux entrées ; c’est-à-dire afficher les différences depuis l’index ou avec un fichier sur disque avec le contenu de l’arbre.

--relative[=<chemin>]

Lorsque lancé depuis un sous-répertoire du projet, il peut lui être indiqué d’exclure les modifications hors du répertoire et d’afficher les noms de chemins relativement à lui avec cette option. Quand vous n’êtes pas dans un sous-répertoire (par ex. dans un dépôt nu), vous pouvez nommer quel sous-répertoire par rapport auquel afficher la sortie en fournissant un argument <chemin>.

-a
--text

Traiter tous les fichiers comme texte.

--ignore-cr-at-eol

Ignorer les retours chariot en fin de ligne lors de la comparaison.

--ignore-space-at-eol

Ignorer les modifications d’espaces en fin de ligne.

-b
--ignore-space-change

Ignorer les modifications de nombre d’espaces. Cela ignore les espaces en fin de ligne et considère toutes les autres séquences d’un caractère blanc ou plus comme équivalentes.

-w
--ignore-all-space

Ignorer les blancs lors de la comparaison de lignes. Ceci ignore les différences même si une ligne contient des espaces alors que l’autre n’en a pas.

--ignore-blank-lines

Ignorer les modifications dont les lignes sont blanches.

--inter-hunk-context=<lignes>

Afficher le contexte entre des sections de diff, jusqu’au nombre spécifié de lignes, fusionnant de ce fait les sections qui sont proches. Par défaut, diff.interHunkContext ou 0 si l’option de configuration n’est pas configurée.

-W
--function-context

Afficher le corps des fonctions englobant les modifications.

--ext-diff

Permettre l’exécution d’un assistant externe de différence. Si vous définissez un pilote externe de différence avec gitattributes[5], vous avez besoin d’utiliser cette option avec git-log[1] et compagnie.

--no-ext-diff

Désactiver les pilotes de diff externes.

--textconv
--no-textconv

Permettre (ou désactiver) le lancement des filtres externes de conversion en texte lors de la comparaison de fichiers binaires. Voir gitattributes[5] pour plus de détails. Comme les filtres textconv sont typiquement des conversions à sens unique, la diff résultante est adaptée à la consommation humaine, mais ne peut pas être appliquée. Pour cette raison, les filtres textconv sont activés par défaut seulement pour git-diff[1] et git-log[1], mais pas pour git-format-patch[1] ou les commandes de plomberie de diff.

--ignore-submodules[=<quand>]

Ignorer les modifications à des sous-modules lors de la génération du diff. <quand> peut valoir "none" (aucun), "untracked" (non-suivi), "dirty" (sale) ou "all" (tout) qui est la valeur par défaut. L’utilisation de "none" va considérer comme modifiés les sous-modules quand ils contiennent soit des fichiers non-suivis ou modifiés, ou si sa HEAD diffère du commit enregistré dans le super-projet, et peut être utilisé pour passer outre tout réglage de l’option ignore dans git-config[1] ou gitmodules[5]. Quand "untracked" est utilisé, les sous-modules ne sont pas considérés sales quand ils ne contiennent que du contenu non suivi (mais ils sont quand même scannés pour trouver du contenu modifié). L’utilisation de "dirty" ignore toutes les modifications à l’arbre de travail des sous-modules ; seules les modifications aux commits stockés dans le super-projet sont affichées (c’était le comportement jusqu’à 1.7.0). La valeur "all" cache toutes les modifications des sous-modules.

--src-prefix=<préfixe>

Afficher le préfixe de source fourni au lieu de "a/".

--dst-prefix=<préfixe>

Afficher le préfixe de destination fourni au lieu de "b/".

--no-prefix

N’afficher aucun préfixe ni de source, ni de destination.

--line-prefix=<préfixe>

Préfixer avec une chaîne additionnelle chaque ligne de la sortie.

--ita-invisible-in-index

Par défaut, une entrée ajoutée par "git add -N" apparaît comme un fichier vide existant dans "git diff" et un nouveau fichier dans "git diff --cached". Cette option fait apparaître l’entrée comme un fichier nouveau dans "git diff" et non existant dans "git diff --cached". Cette option peut être inversée avec --ita-visible-in-index. Les deux options sont expérimentales et peuvent être retirées dans le futur.

Pour une explication plus détaillée sur ces options communes, voir aussi gitdiffcore[7].

Génération du texte de rustine avec -p

Exécuter git-diff[1], git-log[1], git-show[1], git-diff-index[1], git-diff-tree[1] ou git-diff-files[1] avec l’option -p produit le texte de rustine. Vous pouvez personnaliser la création du texte de rustine via les variables d’environnement GIT_EXTERNAL_DIFF et GIT_DIFF_OPTS.

L’option produit quelque chose légèrement différent du format diff traditionnel :

  1. Il est précédé d’un entête "git diff" qui ressemble à ceci :

    diff --git a/fichier1 b/fichier2

    les noms de fichiers sous a/ et b/ sont identiques à moins qu’il y ait eu un renommage ou une copie, même pour un création ou une suppression, /dev/null n’est pas utilisé à la place des noms de fichier a/ ou`b/`.

    Quand un renommage ou un copie est décrit, fichier1 et fichier2 indiquent les noms du fichier source et du fichier cible, respectivement.

  2. Suivent un ligne ou plus d’entête étendu :

    old mode <mode>
    new mode <mode>
    deleted file mode <mode>
    new file mode <mode>
    copy from <chemin>
    copy to <chemin>
    rename from <chemin>
    rename to <chemin>
    similarity index <nombre>
    dissimilarity index <nombre>
    index <empreinte>..<empreinte> <mode>

    Les modes de fichier sont affichés comme des nombres à 6 chiffres en octal incluant le type de fichier et les bits de permission.

    Les noms de chemin dans les entêtes étendus n’incluent pas les préfixes a/ et b/.

    L’index de similarité et le pourcentage de lignes inchangées et l’index de dissimilarité est le pourcentage de lignes changées. Il est arrondi à l’entier inférieur, suivi du signe pourcent. Une valeur d’index de similarité à 100 % correspond donc à deux fichiers identiques, tandis qu’un index de dissimilarité de 100 % signifie qu’aucune ligne de l’ancien fichier ne se retrouve dans le nouveau fichier.

    La ligne d’index inclut les noms des objets blob avant et après la modification. Le <mode> est inclus si le mode du fichier n’est pas modifié ; sinon, des lignes séparées indiquent l’ancien et le nouveau mode.

  3. Les noms de chemin avec des caractères « inhabituels » sont cités comme expliqué pour la variable de configuration core.quotePath (voir git-config[1]).

  4. Tous les fichiers fichier1 de la sortie font référence à des fichiers avant la validation, et tous les fichiers fichier2 font référence aux fichiers après la validation. Il est incorrect d’appliquer chaque modification à chaque fichier séquentiellement. Par exemple, cette rustine échange a et b :

    diff --git a/a b/b
    rename from a
    rename to b
    diff --git a/b b/a
    rename from b
    rename to a

Format de diff combiné

Toute commande générant un diff accepte l’option -c ou -cc pour produire un diff combiné lors de l’affichage d’une fusion. C’est le format par défaut pour afficher les fusions avec git-diff[1] ou git-show[1]. Notez aussi que vous pouvez ajouter l’option -m à toutes ces commandes pour forcer la génération des diffs avec un parent individuel d’une fusion.

Un format de diff combiné ressemble à ceci :

diff --combined describe.c
index fabadb8,cc95eb0..4866510
--- a/describe.c
+++ b/describe.c
@@@ -98,20 -98,12 +98,20 @@@
	return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1;
  }

- static void describe(char *arg)
 -static void describe(struct commit *cmit, int last_one)
++static void describe(char *arg, int last_one)
  {
 +	unsigned char sha1[20];
 +	struct commit *cmit;
	struct commit_list *list;
	static int initialized = 0;
	struct commit_name *n;

 +	if (get_sha1(arg, sha1) < 0)
 +		usage(describe_usage);
 +	cmit = lookup_commit_reference(sha1);
 +	if (!cmit)
 +		usage(describe_usage);
 +
	if (!initialized) {
		initialized = 1;
		for_each_ref(get_name);
  1. Il est précédé d’un entête "git diff", qui ressemble à ceci (quand l’option -c est utilisée) :

    diff --combined file

    ou à ceci (lorsque l’option --cc est utilisée) :

    diff --cc file
  2. Il est suivi par une ligne d’entête étendu ou plus (cet exemple montre une fusion avec deux parents) :

    index <empreinte>,<empreinte>..<empreinte>
    mode <mode>,<mode>..<mode>
    new file mode <mode>
    deleted file mode <mode>,<mode>

    La ligne mode <mode>,<mode>..<mode> n’apparaît que si au moins un des modes est différent du reste. Les entêtes étendus avec l’information à propos des déplacements détectés de contenu (détection de renommages et de copies) sont conçus pour fonctionner avec le diff de deux <arbre-esques> et ne sont pas utilisés dans le format de diff combiné.

  3. Il est suivi par un entête de deux lignes fichier-source/fichier-cible

    --- a/fichier
    +++ b/fichier

    Similaire à l’entête à deux lignes pour le format diff unifié traditionnel, /dev/null est utilisé pour indiquer un fichier créé ou supprimé.

    Cependant, si l’option --combined-all-paths est fournie, au lieu des deux lignes de fichier-source/fichier-cible, vous obtenez un en-tête de N+1 lignes de fichier-source/fichier-cible, où N est le nombre de parents dans le commit de fusion

    --- a/fichier
    --- a/fichier
    --- a/fichier
    +++ b/fichier

    Ce format étendu peut être utile si la détection de renommage ou de copie est active, pour vous permettre de voir le nom original du fichier dans différents parents.

  4. Le format d’entête de section est modifié pour empêcher l’utilisation accidentelle avec patch -p1. Le format de diff combiné a été créé pour les revues des modifications de commits de fusions, et n’était pas destiné à être appliqué. La modification est similaire à la modification dans l’entête étendu d’index :

    @@@ <intervalle-de-fichier-source> <intervalle-de-fichier-source> <intervalle-de-fichier-cible> @@@

    Il y a (nombre de parents + 1) caractères @ dans l’entête de section pour le format de diff combiné.

À la différence du format diff unifié traditionnel qui montre deux fichiers A et B avec une seule colonne qui a un préfixe - (moins — apparaît dans A mais supprimé dans B), + (plus — manquant dans A mais ajouté dans B), ou " " (espace — non modifié), ce format compare un fichier ou plus fichier1, fichier2,… avec un fichier X, et affiche comment X diffère de chaque fichierN. Une colonne pour chaque fichierN est insérée dans la sortie pour montrer comment la ligne de X est différente de la ligne correspondante de celui-ci.

Un caractère - dans la colonne N signifie que la ligne apparaît dans fichierN mais pas dans le résultat. Un caractère + dans la colonne N signifie que la ligne apparaît dans le résultat, et fichierN ne l’a pas (en d’autres termes, la ligne a été ajoutée du point de vue de ce parent).

Dans l’exemple de sortie ci-dessus, la signature de la fonction a été changée depuis les deux fichiers (d’où les deux suppressions - depuis fichier1 et fichier2, plus ++ pour signifier qu’une ligne qui a été ajoutée n’apparaît ni dans fichier1 ni dans fichier2). De plus, huit autres lignes sont identiques depuis fichier1 mais n’apparaissent pas dans fichier2 (et sont donc préfixées par +).

Quand affiché par git diff-tree -c, les parents du commit de fusion sont comparés avec le résultat de fusion (c-à-d fichier1..fichierN sont les parents) ; Quand affiché par git diff-files -c, les deux parents de fusion non résolue sont comparés avec le fichier dans l’arbre de travail (c-à-d fichier1 est stage 2, « notre version », fichier2 est stage 3, « leur version »).

EXEMPLES

git show v1.0.0

Affiche l’étiquette v1.0.0, ainsi que l’objet sur lequel elle pointe.

git show v1.0.0^{tree}

Affiche l’arbre pointé par l’étiquette v1.0.0.

git show -s --format=%s v1.0.0^{commit}

Affiche le titre du commit pointé par le tag v1.0.0.

git show next~10:Documentation/README

Affiche le contenu du fichier Documentation/README tel qu’il était dans le 10ème dernier commit de la branche next.

git show master:Makefile master:t/Makefile

Concatène le contenu desdits Makefiles dans l’en-tête de la branche ‘master’.

DISCUSSION

Git est dans une certaine mesure agnostique concernant l’encodage des caractères.

  • Le contenu des objets blob est une séquence d’octets non interprétés. Il n’y a pas de conversion d’encodage au niveau de base.

  • Les noms de chemins sont encodés en forme C de normalisation UTF-8. Ceci s’applique aux objets arbre, au fichier d’index, au noms de références ainsi qu’aux noms de chemin en argument de ligne de commande, aux variables d’environnement et aux fichiers de configuration (.git/config (voir git-config[1]), gitignore[5], gitattributes[5] and gitmodules[5]).

    Remarquez que Git traite les noms de chemins comme des séquences d’octets non-nuls au niveau de base, il n’y a pas de conversion d’encodage des noms de fichiers (sauf sur Mac et Windows). De ce fait, l’utilisation de noms de chemins non-ASCII fonctionnera pratiquement, même sur les plateformes et systèmes de fichier utilisant d’anciens encodages d’ASCII étendu.

  • Les messages du journal des validations sont typiquement encodés en UTF-8, mais les autres encodages d’ASCII étendu sont aussi pris en charge. Ceci inclut ISO-8859-x, CP125x et de nombreux autres, mais pas UTF-16/32, EBCDIC ni les encodages multi-octets CJK (GBK, Shift-JIS, Big5, EUC-x, CP9xx etc.).

Bien que l’usage de UTF-8 dans les messages de validation soit encouragé, le cœur de Git et la porcelaine sont conçus pour ne pas forcer l’usage d’UTF-8 dans les projets. Si tous les participants d’un projet donné trouvent plus simple d’utiliser des encodages anciens, Git ne l’interdit pas. Cependant, il y a quelques détails à garder en tête.

  1. git commit et git commit-tree affichent un avertissement si le message de validation fourni ne semble pas être une chaîne de caractères UTF-8 valide, à moins que vous n’indiquiez explicitement que votre projet utilise un encodage ancien. La manière de l’indiquer est d’avoir i18n.commitencoding dans .git/config, comme ceci :

    [i18n]
    	commitEncoding = ISO-8859-1

    Les objets commit créés avec le réglage ci-dessus enregistrent la valeur de i18n.commitEncoding dans leur entête d’encodage encoding. Ceci permet d’aider les personnes qui les liront plus tard. L’absence de cet entête implique que les message de validation est encodé en UTF-8.

  2. Sauf indication contraire, git log, git show, git blame et consort lisent l’entête encoding d’un objet commit et essaient de ré-encoder le message de validation en UTF-8. Vous pouvez spécifier l’encodage de sortie que vous souhaitez avec i18n.logOutputEncoding dans le fichier .git/config, comme ceci :

    [i18n]
    	logOutputEncoding = ISO-8859-1

    Si vous n’avez pas changé cette variable de configuration, c’est la valeur de i18n.commitEncoding qui est utilisée.

Remarquez qu’il a été délibérément choisi de ne pas ré-encoder le message de validation quand le commit est créé pour forcer l’UTF-8 au niveau de l’objet commit parce que ré-encoder en UTF-8 n’est pas nécessairement une opération réversible.

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 .