2011-12-19 8 views

risposta

52

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

+0

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

5

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?).

15

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?

+1

Questa è probabilmente la migliore spiegazione del hunk diff. – mahonya

+0

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

+0

@Si prega di produrre un esempio riproducibile minimo. –