J'ai collecté des données à partir des informations renvoyées par
git diff <commitId>..<commitId>
et je suis tombé sur @@ -1 +1 @@
Je n'arrive pas à comprendre ce que ça me dit. J'ai cherché un peu sur Google mais en vain.
J'ai collecté des données à partir des informations renvoyées par
git diff <commitId>..<commitId>
et je suis tombé sur @@ -1 +1 @@
Je n'arrive pas à comprendre ce que ça me dit. J'ai cherché un peu sur Google mais en vain.
Réponses:
C'est un identificateur de morceau de diff unifié. Ceci est documenté par GNU Diffutils.
Le format de sortie unifié commence par un en-tête de deux lignes, qui ressemble à ceci:
--- from-file from-file-modification-time +++ to-file to-file-modification-timeL'horodatage semble
2002-02-21 23:30:39.942229878 -0800
indiquer la date, l'heure avec des fractions de seconde et le fuseau horaire. Les fractions de seconde sont omises sur les hôtes qui ne prennent pas en charge les horodatages fractionnaires.Vous pouvez modifier le contenu de l'en-tête avec l'
--label=label
option; voir Voir Noms alternatifs .Viennent ensuite un ou plusieurs morceaux de différences; chaque morceau montre une zone où les fichiers diffèrent. Les morceaux de format unifié ressemblent à ceci:
@@ numéros-de-ligne-de-fichier-numéros -de-ligne-de-fichier @@ ligne-de-l'un ou l'autre-fichier ligne-de-l'un ou l'autre-fichier ...Si un morceau ne contient qu'une seule ligne, seul son numéro de ligne de départ apparaît. Sinon, ses numéros de ligne ressemblent à . Un morceau vide est considéré comme commençant à la ligne qui suit le morceau.
start,count
Si un morceau et son contexte contiennent deux lignes ou plus, ses numéros de ligne ressemblent à . Sinon, seul son numéro de ligne de fin apparaît. Un morceau vide est considéré comme se terminant à la ligne qui précède le morceau.
start,count
Les lignes communes aux deux fichiers commencent par un caractère espace. Les lignes qui diffèrent réellement entre les deux fichiers ont l'un des caractères indicateurs suivants dans la colonne d'impression de gauche:
- +
Une ligne a été ajoutée ici au premier fichier.- -
Une ligne a été supprimée ici du premier fichier.
Analyse d'exemple simple
Le format est fondamentalement le même que le diff -u
diff unifié.
Par exemple:
diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')
Ici, nous avons supprimé les lignes 2, 3, 14 et 15. Sortie:
@@ -1,6 +1,4 @@
01
-02
-03
04
05
06
@@ -11,6 +9,4 @@
11
12
13
-14
-15
16
@@ -1,6 +1,4 @@
veux dire:
-1,6
signifie que ce morceau du premier fichier commence à la ligne 1 et affiche un total de 6 lignes. Par conséquent, il affiche les lignes 1 à 6.
1
2
3
4
5
6
-
signifie «ancien», comme nous l'appelons habituellement diff -u old new
.
+1,4
signifie que cette partie du deuxième fichier commence à la ligne 1 et affiche un total de 4 lignes. Par conséquent, il affiche 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:
01
04
05
06
@@ -11,6 +9,4 @@
pour le deuxième morceau est analogue:
sur l'ancien fichier, nous avons 6 lignes, commençant à la ligne 11 de l'ancien fichier:
11
12
13
14
15
16
sur le nouveau fichier, nous avons 4 lignes, 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 morceau précédent: 2 et 3.
Tête de morceau
Selon votre version et configuration de git, vous pouvez également obtenir une ligne de code à côté de la @@
ligne, par exemple le func1() {
in:
@@ -4,7 +4,6 @@ func1() {
Ceci peut également être obtenu avec le -p
drapeau de plaine diff
.
Exemple: ancien fichier:
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
Si nous supprimons la ligne 6
, le diff montre:
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
Notez que ce n'est pas la bonne ligne pour func1
: il a sauté des lignes 1
et 2
.
Cette fonctionnalité géniale indique souvent exactement à quelle fonction ou classe appartient chaque morceau, ce qui est très utile pour interpréter le diff.
Comment l'algorithme pour choisir l'en-tête fonctionne exactement est discuté à: D'où vient l'extrait dans l'en-tête de git diff hunk?
@@ -1,6 +1,4 @@
comme "À partir de la ligne 1, l'ancien nombre de lignes était de 6 mais le nouveau nombre de lignes est de 4"
Ce sont les informations de plage de morceau actuel indiquant sur quels numéros de ligne ce morceau de diff commence et se termine.
Lisez http://en.wikipedia.org/wiki/Diff#Unified_format pour une explication détaillée.