Pouvez-vous décrire quel fichier aboutit à un tel en-tête?
kworr
@kworr c'est une question stupide, tout diff au format unifié a des en-têtes de plage.
Yuval Adam
@YuvalAdam: en fait le format unifié diff a plus de champs qui devraient être remplis comme [- +] <position>, <lines> et ici nous n'avons aucun changement affiché mais cela change touche la première ligne du fichier.
kworr
Réponses:
69
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:
L'horodatage semble 2002-02-21 23:30:39.942229878 -0800indiquer 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=labeloption; 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.
-1,6signifie 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,4signifie 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 11est 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 -pdrapeau 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 1et 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.
Réponses:
C'est un identificateur de morceau de diff unifié. Ceci est documenté par GNU Diffutils.
la source
Analyse d'exemple simple
Le format est fondamentalement le même que le
diff -u
diff unifié.Par exemple:
Ici, nous avons supprimé les lignes 2, 3, 14 et 15. Sortie:
@@ -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.-
signifie «ancien», comme nous l'appelons habituellementdiff -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:
@@ -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:
sur le nouveau fichier, nous avons 4 lignes, commençant à la ligne 9 du nouveau fichier:
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 lefunc1() {
in:Ceci peut également être obtenu avec le
-p
drapeau de plainediff
.Exemple: ancien fichier:
Si nous supprimons la ligne
6
, le diff montre:Notez que ce n'est pas la bonne ligne pour
func1
: il a sauté des lignes1
et2
.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?
la source
@@ -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.
la source