Ho raccolto dati dalle informazioni restituite da
git diff <commitId>..<commitId>
e mi sono imbattuto @@ -1 +1 @@
Non riesco a capire cosa mi stia dicendo. Ho cercato un po 'su Google ma inutilmente.
Ho raccolto dati dalle informazioni restituite da
git diff <commitId>..<commitId>
e mi sono imbattuto @@ -1 +1 @@
Non riesco a capire cosa mi stia dicendo. Ho cercato un po 'su Google ma inutilmente.
Risposte:
È un identificatore di hunk diff unificato. Questo è documentato da GNU Diffutils.
Il formato di output unificato inizia con un'intestazione di due righe, simile a questa:
--- from-file from-file-modification-time +++ to-file to-file-modification-timeIl timestamp sembra
2002-02-21 23:30:39.942229878 -0800
indicare la data, l'ora con frazioni di secondo e il fuso orario. I secondi frazionari vengono omessi sugli host che non supportano i timestamp frazionari.Puoi modificare il contenuto dell'intestazione con l'
--label=label
opzione; vedere Vedere Nomi alternativi .Poi vengono uno o più pezzi di differenze; ogni pezzo mostra un'area in cui i file differiscono. Gli hunk di formato unificato hanno questo aspetto:
@@ from-file-line-numbers to-file-line-numbers @@ line-from-any-file line-from-any-file ...Se un pezzo contiene solo una riga, viene visualizzato solo il numero della riga iniziale. Altrimenti i suoi numeri di riga sembrano . Si considera che un pezzo vuoto inizi sulla linea che segue il pezzo.
start,count
Se un pezzo e il suo contesto contengono due o più righe, i suoi numeri di riga saranno simili . In caso contrario, viene visualizzato solo il numero della riga finale. Si considera che un pezzo vuoto termini sulla linea che precede il pezzo.
start,count
Le righe comuni a entrambi i file iniziano con uno spazio. Le righe che differiscono effettivamente tra i due file hanno uno dei seguenti caratteri indicatori nella colonna di stampa a sinistra:
- +
Una riga è stata aggiunta qui al primo file.- -
Una riga è stata rimossa qui dal primo file.
Semplice analisi di esempio
Il formato è fondamentalmente lo stesso del diff -u
diff unificato.
Per esempio:
diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')
Qui abbiamo rimosso le righe 2, 3, 14 e 15. Risultato:
@@ -1,6 +1,4 @@
01
-02
-03
04
05
06
@@ -11,6 +9,4 @@
11
12
13
-14
-15
16
@@ -1,6 +1,4 @@
si intende:
-1,6
significa che questo pezzo del primo file inizia alla riga 1 e mostra un totale di 6 righe. Quindi mostra le righe da 1 a 6.
1
2
3
4
5
6
-
significa "vecchio", come di solito lo chiamiamo diff -u old new
.
+1,4
significa che questo pezzo del secondo file inizia alla riga 1 e mostra un totale di 4 righe. Quindi mostra le righe da 1 a 4.
+
significa "nuovo".
Abbiamo solo 4 righe invece di 6 perché 2 righe sono state rimosse! Il nuovo pezzo è solo:
01
04
05
06
@@ -11,6 +9,4 @@
per il secondo pezzo è analogo:
sul vecchio file, abbiamo 6 righe, a partire dalla riga 11 del vecchio file:
11
12
13
14
15
16
sul nuovo file, abbiamo 4 righe, a partire dalla riga 9 del nuovo file:
11
12
13
16
Nota che la riga 11
è la nona riga del nuovo file perché abbiamo già rimosso 2 righe sul blocco precedente: 2 e 3.
Intestazione del pezzo
A seconda della versione e della configurazione di git, puoi anche ottenere una riga di codice accanto alla @@
riga, ad esempio func1() {
in:
@@ -4,7 +4,6 @@ func1() {
Questo può essere ottenuto anche con la -p
bandiera della pianura diff
.
Esempio: vecchio file:
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
Se rimuoviamo la linea 6
, il diff mostra:
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
Nota che questa non è la riga corretta per func1
: ha saltato le righe 1
e 2
.
Questa fantastica funzionalità spesso dice esattamente a quale funzione o classe appartiene ogni pezzo, il che è molto utile per interpretare il diff.
Come funziona esattamente l'algoritmo per scegliere l'intestazione è discusso in: Da dove viene l'estratto nell'intestazione dell'hunk diff di git?
@@ -1,6 +1,4 @@
come "A partire dalla riga 1, il conteggio delle vecchie righe era 6 ma il conteggio delle nuove righe è 4"
Sono le informazioni sull'intervallo di hunk correnti che indicano su quali numeri di riga inizia e finisce questo hunk diff.
Leggi http://en.wikipedia.org/wiki/Diff#Unified_format per una spiegazione approfondita.