65 votes

Que signifient les chiffres sur un en-tête Git Diff ?

Chaque fois que j'exécute git diff, pour chaque modification apportée, j'obtiens une sorte d'en-tête avec des chiffres, par exemple :

@@ -169,14 +167,12 @@ function Browser(window, document, body, XHR, $log) {.....

Je me demande ce que signifient les quatre chiffres ? Je suppose que -169 signifie que cette ligne de code particulière qui suit était à l'origine dans la ligne 169 mais se trouve maintenant dans la 167 ? Et que signifient 14 et 12 ?

70voto

Andrejs Cainikovs Points 7758

Ce site en-tête est appelé jeu de monnaie, ou hunk. Chaque hunk commence par une ligne qui contient, entourée de @@, la ligne ou la plage de ligne from,no-of-lines dans le fichier précédent (avec un - ) et après (avec un + ) les changements. Ensuite viennent les lignes du fichier. Les lignes qui commencent par un - sont supprimées, les lignes commençant par un + sont ajoutés. Chaque ligne modifiée par le patch est entourée de 3 lignes de contexte avant et après.

Un ajout ressemble à ceci :

@@ -75,6 +103,8 @@
 foo
 bar
 baz
+line1
+line2
 more context
 and more
 and still context

Cela signifie que, dans le fichier original, avant la ligne 78 (= 75 + 3 lignes de contexte), ajoutez deux lignes. Ce seront les lignes 106 (= 103 + 3 lignes de contexte) à 107 après tous les changements.
Notez la différence dans from (-75 vs +103), cela signifie qu'il y a eu d'autres changements dans ce fichier avant ce morceau particulier, qui ont ajouté 28 (103 - 75) lignes de code.

Une suppression ressemble à ceci :

@@ -75,7 +75,6 @@
 foo
 bar
 baz
-line1
 more context
 and more
 and still context

Cela signifie qu'il faut supprimer la ligne 78 (= 75 + 3 lignes de contexte) dans le fichier original. Le contexte inchangé sera sur les lignes 75 à 80 après toutes les modifications.
Notez que from Les nombres dans ce hunk sont égaux (-75 et +75), cela signifie que soit il n'y a eu aucune modification avant ce hunk, soit les quantités de lignes ajoutées et supprimées dans les modifications précédentes sont les mêmes.

Finalement, une modification ressemble à ceci :

@@ -70,7 +70,7 @@
 foo
 bar
 baz
-red
+blue
 more context
 and more
 still context

Cela signifie qu'il faut changer la ligne 73 (= 70 + 3 lignes de contexte) dans le fichier avant tous les changements, qui contient le rouge en bleu. La ligne modifiée est également la ligne 73 (= 70 + 3 lignes de contexte) dans le fichier après toutes les modifications.

Le crédit revient à Markus Bertheau .

21voto

Ciro Santilli Points 3341

Je me demande ce que signifient ces quatre chiffres.

Analysons un exemple simple

Le format est fondamentalement le même que celui de la diff -u diff. unifiée

Nous commençons par les chiffres de 1 à 16 et supprimons 2, 3, 14 et 15 :

diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$')

Sortie :

@@ -1,6 +1,4 @@
 1
-2
-3
 4
 5
 6
@@ -11,6 +9,4 @@
 11
 12
 13
-14
-15
 16

@@ -1,6 +1,4 @@ signifie :

  • -1,6 signifie que ce morceau du premier fichier commence à la ligne 1 et affiche un total de 6 lignes. Il montre donc les lignes 1 à 6.

    1
    2
    3
    4
    5
    6

    - signifie "vieux", comme nous l'invoquons habituellement en tant que diff -u old new .

  • +1,4 signifie que ce morceau du second fichier commence à la ligne 1 et affiche un total de 4 lignes. Il montre donc les lignes 1 à 4.

    + signifie "nouveau".

    Nous n'avons que 4 lignes au lieu de 6 car 2 lignes ont été supprimées ! Le nouveau morceau est juste :

    1
    4
    5
    6

@@ -11,6 +9,4 @@ pour le second morceau est analogue :

  • sur l'ancien fichier, nous avons 6 lignes, en commençant à la ligne 11 de l'ancien fichier :

    11
    12
    13
    14
    15
    16
  • sur le nouveau fichier, nous avons 4 lignes, en commençant à la ligne 9 du nouveau fichier :

    11
    12
    13
    16

    Notez que la ligne 11 est la 9ème ligne du nouveau fichier car nous avons déjà supprimé 2 lignes sur le hunk précédent : 2 et 3.

4voto

Jose Alban Points 3906

Résumé :

  • Supposons que git diff affichera [0-3] lignes de contexte [avant/après] [premier/dernier] changement.

@@ -[ original file's number of first line displayed ],[ context lines + removed lines ] +[ changed file's number of first line displayed ],[ context lines + added lines ] @@

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X