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

NOM

git-range-diff - Comparer deux plages de commits (par exemple deux versions d’une branche)

SYNOPSIS

git range-diff [--color=[<quand>]] [--no-color] [<options-de-diff>]
	[--no-dual-color] [--creation-factor=<facteur>]
	[--left-only | --right-only] [--diff-merges=<format>]
	[--remerge-diff]
	( <plage1> <plage2> | <rev1>
​<rev2> | <base> <rev1> <rev2> )
	[[--] <chemin>
​]

DESCRIPTION

Cette commande affiche les diffĂ©rences entre deux versions d’une sĂ©rie de rustines, ou plus gĂ©nĂ©ralement, entre deux plages de commits (en ignorant les commits de fusion).

En prĂ©sence d’arguments <chemin>, ces plages de commits sont restreintes en consĂ©quence.

À cette fin, elle recherche les paires de commits depuis les deux plages de commits qui se correspondent. Deux commit sont dits correspondre quand les diffs entres leurs rustines (c-Ă -d. les information d’auteur, les messages de commit et les diffs des commits) sont raisonnablement petites par rapport Ă  la taille des rustines. Voir ``Algorithme`` ci-dessous pour plus de dĂ©tails.

Enfin, la liste des commits en correspondance est affichĂ©e dans l’ordre de la deuxiĂšme plage de commits, avec les commits sans correspondance insĂ©rĂ©s aprĂšs que tous leurs ancĂȘtres ont Ă©tĂ© affichĂ©s.

Il existe trois moyens de spĂ©cifier les plages de commit :

  • <plage1><plage2> : la plage de commits peut ĂȘtre de la forme <base>..<rev>, <rev>^!-<n>. Voir SPECIFIER LES PLAGES dans gitrevisions[7] pour de plus amples dĂ©tails.

  • <rĂ©v1>...<rĂ©v2>. C’est Ă©quivalent Ă  <rĂ©v2>..<rĂ©v1> <rĂ©v1>..<rĂ©v2>.

  • <base> <rev1> <rev2> : C’estquivalent Ă  <base>..<rev1> <base>..<rev2>.

OPTIONS

--no-dual-color

Quand les diffs de commit diffĂšrent, git range-diff recrĂ©e le coloriage original des diffs et ajoute les marqueurs de diff externes -/+ avec le fond en rouge/vert pour le rendre plus visible, par exemple lorsqu’il y a eu une modification et quelles lignes ont Ă©tĂ© ajoutĂ©es.

En outre, les lignes diff de commit qui sont seulement prĂ©sentes dans la plage du premier commit sont montrĂ©es "attĂ©nuĂ©es" (ceci peut ĂȘtre surchargĂ© Ă  l’aide du rĂ©glage de configuration`color.diff.<crĂ©neau>` oĂč <crĂ©neau> peut ĂȘtre contextDimmed, oldDimmed ou`newDimmed`), et les lignes du diff de commit qui ne sont prĂ©sentes que dans la plage du second commit sont montrĂ©es en gras (ce qui peut ĂȘtre surchargĂ© Ă  l’aide du rĂ©glage de configuration`color.diff.<crĂ©neau>` oĂč <crĂ©neau> peut ĂȘtre contextBold, oldBold ou`newBold`).

Ceci est connu par range-diff sous le nom de « coloration double Â». Utilisez --no-dual-color pour retourner Ă  la coloration de toutes les lignes selon les marqueurs de diff externes (et ignorer complĂštement la colorisation du diff interne).

--creation-factor=<pourcentage>

DĂ©finir le facteur de coĂ»t de crĂ©ation/de suppression Ă  <pourcent>. Par dĂ©faut Ă  60. Essayez une plus grande valeur si git range-diff considĂšre erronĂ©ment une réécriture totale comme un grand changement (la suppression d’un commit et l’ajout d’un autre), et une plus petite dans le cas inverse. Voir la section ``Algorithme`` ci-dessous pour une explication de pourquoi cela est nĂ©cessaire.

--left-only

Supprimer les commits qui manquent dans la premiĂšre plage spĂ©cifiĂ©e (ou dans la « plage de gauche » lors de l’utilisation du format <rĂ©v1>...<rĂ©v2>).

--right-only

Supprimer les commits qui manquent dans la deuxiĂšme plage spĂ©cifiĂ©e (ou dans la « plage de droite » lors de l’utilisation du format <rĂ©v1>...<rĂ©v2>).

--diff-merges=<format>

Au lieu d’ignorer les commits de fusion, gĂ©nĂ©rer des diffs pour eux Ă  l’aide de l’option correspondante --diff-merges=<format> de git-log[1] et les inclure dans la comparaison.

Note : dans le cas habituel, le mode remerge sera le mode le plus naturel Ă  utiliser, car il montre seulement la diff sur ce que la machinerie de fusion de Git aurait produit. En d’autres termes, si un commit de fusion est le rĂ©sultat d’une fusion non conflictuelle, le mode remerge le reprĂ©sentera avec une diff vide.

--remerge-diff

Option de comfort, équivalente à --diff-merges=remerge.

--notes[=<ref>]
--no-notes

Ce drapeau est passé au programme git log (voir git-log[1]) qui génÚre les rustines.

<plage1> <plage2>

Comparer les commits spĂ©cifiĂ©s par les deux plages, oĂč <plage1> est considĂ©rĂ© comme une version ancienne de <plage2> .

<rĂ©v1>
​<rĂ©v2>

Equivalent à passer <rév2>..<rév1> et <rév1>..<rév2>.

<base> <rév1> <rév2>

Équivalent Ă  passer <base>..<rĂ©v1> et <base>..<rĂ©v2>. Notez que <base> n’a pas besoin d’ĂȘtre le point exact d’embranchement des branches. Par exemple : aprĂšs avoir rebasĂ© une branche mon-sujet, git range-diff my-topic@{u} mon-sujet@{1} mon-sujet montrerait les diffĂ©rences introduites par le rebasage.

git range-diff accepte aussi les options normales de diff (voir git-diff[1]), notablement les options --color=[<quand>] et --no-color. Ces options sont utilisĂ©es lors de la gĂ©nĂ©ration du " diff entre rustines", c-Ă -d pour comparer l’auteur, le message de validation et la diff de commits anciens/nouveaux correspondants. Il n’y a actuellement aucun moyen de bricoler la plupart des options de diff passĂ©es Ă  git log lors de la gĂ©nĂ©ration de ces rustines.

STABILITÉ DE LA SORTIE

La sortie de la commande range-diff est sujette Ă  changement. Elle est destinĂ© Ă  ĂȘtre la production de porcelaine humainement lisible, pas quelque chose qui peut ĂȘtre utilisĂ© Ă  travers les versions de Git pour obtenir un range-diff textuellement stable (par opposition Ă  quelque chose comme l’option --stable de git-patch-id[1]). Il n’y a pas d’équivalent de git-apply[1] pour range-diff, la sortie n’est pas destinĂ©e Ă  ĂȘtre consommable par une machine.

C’est particuliĂšrement vrai lors du passage d’options Ă  diff. Actuellement, certaines options comme --stat peuvent, comme effet Ă©mergent, produire des sorties qui sont assez inutiles dans les contexte de range-diff. Des versions futures de range-diff peuvent apprendre Ă  intercepter de telles options d’un maniĂšre spĂ©cifique Ă  range-diff (c-Ă -d pour --stat produisant une sortie humaine qui rĂ©sume comment les stats de diff ont changĂ©).

CONFIGURATION

Cette commande utilise les réglages diff.color.* et pager.range-diff (ce dernier activé par défaut). Voir git-config[1].

EXEMPLES

Quand un rebasage nĂ©cessite la rĂ©solution d’un conflit de fusion, comparer les modifications introduites par le rebasage directement aprĂšs, en utilisant :

$ git range-diff @{u} @{1} @

Une sortie typique de git range-diff ressemblerait à ceci  :

-:  ------- > 1:  0ddba11 Prepare for the inevitable!
1:  c0debee = 2:  cab005e Add a helpful message at the start
2:  f00dbal ! 3:  decafe1 Describe a bug
    @@ -1,3 +1,3 @@
     Author: A U Thor <author@example.com>

    -TODO: Décrire un bogue
    +Décrire un bogue
    @@ -324,5 +324,6
      C'est attendu.

    -+Ce qui est inattendu est il va aussi se crasher
    ++Étonnamment, il se crash aussi. C'est un bogue et le jury
    ++délibÚre toujours pour le corriger. Voir ticket #314 pour plus de détails.

      Contact
3:  bedead < -:  ------- À-DÉFAIRE

Dans cet exemple, il y a 3 commits anciens et 3 nouveaux, oĂč le dĂ©veloppeur a supprimĂ© le 3Ăšme, en ajoutĂ© un nouveau avant les deux premiers, et a modifiĂ© le message de validation du 2Ăšme commit ainsi que son diff.

Lorsque la sortie va Ă  un terminal, elle est codĂ©e en couleur par dĂ©faut, tout comme la sortie git diff normale. En outre, la premiĂšre ligne (ajout d’un commit) est verte, la derniĂšre ligne (suppression d’un commit) est rouge, la deuxiĂšme ligne (avec une correspondance parfaite) est jaune comme l’en-tĂȘte de commit de la sortie de git show, et la troisiĂšme ligne colore l’ancien commit en rouge, le nouveau en vert et le reste comme l’en-tĂȘte de commit git show.

Une diff naĂŻve de diffs codĂ©e en couleur est en fait un peu difficile Ă  lire, cependant, car elle colorie l’ensemble des lignes rouges ou vertes. La ligne qui a ajoutĂ© "Ce qui est inattendu" dans l’ancien commit, par exemple, est complĂštement rouge, mĂȘme si l’intention de l’ancien commit Ă©tait d’ajouter quelque chose.

Pour arranger cela, range utilise le mode --dual-color par dĂ©faut. Dans ce mode, la diff de diffs conservera les couleurs diff originales, et prĂ©fixera les lignes avec des marqueurs -/+ qui ont leur fond en rouge ou vert, pour rendre plus Ă©vident qu’ils dĂ©crivent comment la diff elle-mĂȘme a changĂ©.

Algorithme

L’idĂ©e gĂ©nĂ©rale est ceci : nous gĂ©nĂ©rons une matrice de coĂ»ts entre les commits dans les deux plages de commits, puis rĂ©solvons l’affectation la moins coĂ»teuse.

La matrice de coĂ»ts est peuplĂ©e ainsi : pour chaque paire de commits, les deux diffs sont gĂ©nĂ©rĂ©s et le « diff des diffs » est gĂ©nĂ©rĂ©, avec 3 lignes de contexte, puis le nombre de lignes dans ce diff est utilisĂ© comme coĂ»t.

Pour Ă©viter les faux positifs (par exemple lorsqu’une rustine a Ă©tĂ© enlevĂ©e, et qu’une rustine non liĂ©e a Ă©tĂ© ajoutĂ©e entre deux itĂ©rations de la mĂȘme sĂ©rie de rustines), la matrice de coĂ»t est Ă©tendue pour permettre cela, en ajoutant des entrĂ©es Ă  coĂ»t fixe pour les grosses suppressions/ajouts.

Exemple : supposons que les commits 1--2 sont la premiĂšre itĂ©ration d’une sĂ©rie de rustines et que A--C sont ceux de la deuxiĂšme itĂ©ration. Supposons que A est un picorage de 2, et C est un picorage de 1 mais avec une petite modification (disons, une correction de frappe). Visualisons les commits comme un graphique bipartite :

    1            A

    2            B

		 C

Nous cherchons une « meilleure » explication de la nouvelle sĂ©rie Ă  partir de l’ancienne. Nous pouvons reprĂ©senter une « explication Â» comme un lien dans le graphe :

    1            A
	       /
    2 --------'  B

		 C

Cette explication est « gratuite Â» parce qu’il n’y avait pas de changement. De mĂȘme C peut ĂȘtre expliquĂ© en utilisant 1, mais cela vient Ă  un certain coĂ»t c>0 en raison de la modification :

    1 ----.      A
	  |    /
    2 ----+---'  B
	  |
	  `----- C
	  c>0

En termes mathĂ©matiques, ce que nous cherchons est une sorte de coĂ»t minimum bipartite correspondant ; 1 est Ă©gal Ă  C Ă  un certain coĂ»t, etc. Le graphe sous-jacent est en fait un graphe bipartite complet ; le coĂ»t que nous associons Ă  chaque arĂȘte est la taille de la diff entre les rustines des deux commits. Pour expliquer aussi les nouveaux commits, nous prĂ©sentons des nƓuds vides des deux cĂŽtĂ©s :

    1 ----.      A
	  |    /
    2 ----+---'  B
	  |
    o     `----- C
	  c>0
    o            o

    o            o

Le coĂ»t d’une arĂȘte o--C est la taille de la diff c, modifiĂ©e d’un facteur d’adaptation qui devrait ĂȘtre infĂ©rieur Ă  100%. Une arĂȘte o--o est gratuite. Le facteur d’adaptation est nĂ©cessaire parce que mĂȘme si 1 et`C` n’ont rien en commun, ils peuvent tout de mĂȘme contenir des lignes vides et autres, rendant probablement l’affectation 1--C, o--o lĂ©gĂšrement moins chĂšre que 1--o, o--C mĂȘme si 1 et C n’ont rien en commun. Avec le facteur d’adaptation, nous exigeons qu’une part plus importante soit commune pour considĂ©rer les rustines comme correspondantes.

Le temps total nĂ©cessaire au calcul de cet algorithme est le temps nĂ©cessaire au calcul de n+m diffs de commits, suivi de m*n diffs de rustines, plus le temps nĂ©cessaire au calcul de l’affectation de moindre coĂ»t entre n et m diffs. Git utilise un implantation de l’algorithme de Jonker-Volgenant pour rĂ©soudre le problĂšme d’affectation, qui de complexitĂ© cubique. La correspondance trouvĂ©e dans ce cas ressemble Ă  ceci :

    1 ----.      A
	  |    /
    2 ----+---'  B
       .--+-----'
    o -'  `----- C
	  c>0
    o ---------- o

    o ---------- o

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 .