Quando uso svn diff
o git diff
che mostra linee come:Cosa significa "@@ ... @@" con i segni in svn diff o git diff?
@@ -1,5 +1,9 @@
Che cosa significano?
Quando uso svn diff
o git diff
che mostra linee come:Cosa significa "@@ ... @@" con i segni in svn diff o git diff?
@@ -1,5 +1,9 @@
Che cosa significano?
Questi sono chiamati (c) intestazioni di hunk e contengono le informazioni sull'intervallo.
Sono circondati da doppio ai segni @@
. Sono di formato:
@@ -l,s +l,s @@
dove l
è il numero di riga iniziale e s
è il numero di linee del cambio (c) si applica a fusto per ogni rispettivo file. -
indica il file originale e +
indica il nuovo file (modificato). Si noti che non mostra solo le linee interessate, ma anche le linee di contesto.
Il -1,5
è nel file originale (indicato dallo -
). Mostra che la prima riga è l'inizio e 5 linee interessate/contesto
Il +1,9
si trova nel nuovo file (modificato) (indicato dallo +
) e di nuovo la prima riga è l'inizio e 9 linee interessate/contesto.
Maggiori dettagli qui: http://en.wikipedia.org/wiki/Diff#Unified_format
Quindi i numeri si riferiscono al pezzo + contesto? cioè le linee stampate da git sono le linee di hunk (modificate) più 3 righe prima e 3 righe dopo le linee di hunk (modificate). Quindi l'intervallo di linee va dall'inizio del contesto alla fine del contesto, cioè da 3 righe prima della prima riga modificata a 3 righe dopo l'ultima linea modificata? – Will
Questi descrivono le linee interessate dal hunk diff. Nel tuo caso, significa che il pezzo colpisce 5 linee a partire dalla riga 1, risultante in una sostituzione a partire dalla riga 1 che è lunga 9 righe.
Si noti che questo è il formato utilizzato dal formato diff unificato. Il formato diff "classico" utilizza un modello diverso (ma chi usa la diff classica in questi giorni?).
semplice analisi esempio
Il formato è fondamentalmente la stessa della diff -u
diff unificato.
Ad esempio:
diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$')
Qui abbiamo rimosso linee 2, 3, 14 e 15. Resa:
@@ -1,6 +1,4 @@
1
-2
-3
4
5
6
@@ -11,6 +9,4 @@
11
12
13
-14
-15
16
@@ -1,6 +1,4 @@
significa:
-1,6
: questo pezzo corrisponde alla riga 1 a 6 del primo file:
1
2
3
4
5
6
-
significa "vecchio", come di solito lo chiamiamo come diff -u old new
.
+1,4
dice che questo pezzo corrisponde alle righe da 1 a 4 del secondo file.
+
significa "nuovo".
Abbiamo solo 4 righe anziché 6 perché sono state rimosse 2 linee! Il nuovo pezzo è solo:
1
4
5
6
@@ -11,6 +9,4 @@
per il secondo pezzo è analogo:
sul vecchio file, abbiamo 6 linee, a partire dalla riga 11 del vecchio file:
11
12
13
14
15
16
sul nuovo file, abbiamo 4 linee, a partire linea 9 del nuovo file:
11
12
13
16
nota che la linea 11
è la linea 9 del nuovo file perché abbiamo già rimosso 2 linee sul pezzo precedente: 2 e 3.
intestazione Hunk
A seconda della versione e della configurazione di Git, è anche possibile ottenere una riga di codice accanto alla linea @@
, ad es. la func1() {
in:
@@ -4,7 +4,6 @@ func1() {
Questo può essere ottenuto anche con l'-p
bandiera pianura diff
.
Esempio: vecchio file:
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
Se togliamo linea 6
, il diff mostra:
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
Si noti che questa non è la linea corretta per func1
: è saltato linee 1
e 2
.
Questa fantastica funzione spesso indica esattamente a quale funzione o classe appartiene ciascun hunk, che è molto utile per interpretare il diff.
Come l'algoritmo di scegliere l'intestazione funziona esattamente è discusso a: Where does the excerpt in the git diff hunk header come from?
Questa è probabilmente la migliore spiegazione del hunk diff. – mahonya
Bene, ho questo @@ -20,7 +20,8 @@ UserDefinedStitcher e ho pensato che forse mi stava dicendo che le mie modifiche erano alla riga 20, o meglio, 20 linee in poi dalla linea 6. (La linea 6 è la linea che dice UserDefinedStitcher.) Ma questo mi porta alla Linea 26, ma i miei cambiamenti erano sulla Linea 23. Quindi sembrerebbe che git sia fuori da 3 linee. Cosa sta succedendo? – Will
@Si prega di produrre un esempio riproducibile minimo. –
Superset: http://stackoverflow.com/questions/2529441/how-to-work-with-diff-representation-in-git/31615438 # 31615438 –