Können Sie beschreiben, welche Datei zu einem solchen Header führt?
Kworr
@kworr das ist eine dumme Frage, jeder Unterschied im einheitlichen Format hat Bereichskopfzeilen.
Yuval Adam
@YuvalAdam: Tatsächlich hat das einheitliche Diff-Format mehr Felder, die wie [- +] <Position>, <Zeilen> ausgefüllt werden sollten, und hier werden keine Änderungen angezeigt, aber diese Änderungen berühren die erste Zeile der Datei.
Kworr
Antworten:
69
Es ist eine einheitliche Diff-Hunk-Kennung. Dies wird von GNU Diffutils dokumentiert .
Das einheitliche Ausgabeformat beginnt mit einem zweizeiligen Header, der folgendermaßen aussieht:
Der Zeitstempel 2002-02-21 23:30:39.942229878 -0800zeigt Datum, Uhrzeit in Sekundenbruchteilen und Zeitzone an. Die Bruchsekunden werden auf Hosts weggelassen, die keine Bruchzeitstempel unterstützen.
Sie können den Inhalt des Headers mit der --label=labelOption ändern . Siehe Siehe Alternative Namen .
Als nächstes kommen ein oder mehrere Unterschiede; Jedes Stück zeigt einen Bereich, in dem sich die Dateien unterscheiden. Unified Format Hunks sehen folgendermaßen aus:
Wenn ein Stück nur eine Zeile enthält, wird nur seine Startzeilennummer angezeigt. Ansonsten sehen die Zeilennummern so aus . Ein leeres Stück beginnt an der Linie, die dem Stück folgt.start,count
Wenn ein Stück und sein Kontext zwei oder mehr Zeilen enthalten, sehen seine Zeilennummern so aus . Andernfalls wird nur die Endzeilennummer angezeigt. Es wird davon ausgegangen, dass ein leeres Stück an der Zeile endet, die dem Stück vorausgeht.start,count
Die beiden Dateien gemeinsamen Zeilen beginnen mit einem Leerzeichen. Die Zeilen, die sich zwischen den beiden Dateien tatsächlich unterscheiden, haben eines der folgenden Kennzeichen in der linken Druckspalte:
+
Hier wurde der ersten Datei eine Zeile hinzugefügt.
- Hier wurde
eine Zeile aus der ersten Datei entfernt.
-1,6bedeutet, dass dieses Stück der ersten Datei in Zeile 1 beginnt und insgesamt 6 Zeilen zeigt. Daher werden die Zeilen 1 bis 6 angezeigt.
1
2
3
4
5
6
-bedeutet "alt", wie wir es normalerweise als aufrufen diff -u old new.
+1,4bedeutet, dass dieses Stück der zweiten Datei in Zeile 1 beginnt und insgesamt 4 Zeilen anzeigt. Daher werden die Zeilen 1 bis 4 angezeigt.
+ bedeutet "neu".
Wir haben nur 4 statt 6 Zeilen, da 2 Zeilen entfernt wurden! Das neue Stück ist nur:
01
04
05
06
@@ -11,6 +9,4 @@ für das zweite Stück ist analog:
In der alten Datei haben wir 6 Zeilen, beginnend mit Zeile 11 der alten Datei:
11
12
13
14
15
16
In der neuen Datei haben wir 4 Zeilen, beginnend mit Zeile 9 der neuen Datei:
11
12
13
16
Beachten Sie, dass die Zeile 11die 9. Zeile der neuen Datei ist, da wir bereits 2 Zeilen auf dem vorherigen Hunk entfernt haben: 2 und 3.
Hunk-Header
Je nach Ihrer git - Version und Konfiguration können Sie auch eine Codezeile neben der bekommen @@Linie, zum Beispiel des func1() {in:
@@ -4,7 +4,6 @@ func1() {
Dies kann auch mit der -pFlagge der Ebene erhalten werden diff.
Beispiel: alte Datei:
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
Wenn wir die Linie entfernen 6, zeigt der Unterschied :
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
Beachten Sie, dass dies nicht die richtige Zeile ist für func1: Es wurden Zeilen 1und übersprungen 2.
Diese großartige Funktion sagt oft genau, zu welcher Funktion oder Klasse jedes Stück gehört, was sehr nützlich ist, um den Unterschied zu interpretieren.
Antworten:
Es ist eine einheitliche Diff-Hunk-Kennung. Dies wird von GNU Diffutils dokumentiert .
quelle
Einfache Beispielanalyse
Das Format ist im Grunde das gleiche wie das
diff -u
einheitliche Diff.Zum Beispiel:
Hier haben wir die Zeilen 2, 3, 14 und 15 entfernt. Ausgabe:
@@ -1,6 +1,4 @@
meint:-1,6
bedeutet, dass dieses Stück der ersten Datei in Zeile 1 beginnt und insgesamt 6 Zeilen zeigt. Daher werden die Zeilen 1 bis 6 angezeigt.-
bedeutet "alt", wie wir es normalerweise als aufrufendiff -u old new
.+1,4
bedeutet, dass dieses Stück der zweiten Datei in Zeile 1 beginnt und insgesamt 4 Zeilen anzeigt. Daher werden die Zeilen 1 bis 4 angezeigt.+
bedeutet "neu".Wir haben nur 4 statt 6 Zeilen, da 2 Zeilen entfernt wurden! Das neue Stück ist nur:
@@ -11,6 +9,4 @@
für das zweite Stück ist analog:In der alten Datei haben wir 6 Zeilen, beginnend mit Zeile 11 der alten Datei:
In der neuen Datei haben wir 4 Zeilen, beginnend mit Zeile 9 der neuen Datei:
Beachten Sie, dass die Zeile
11
die 9. Zeile der neuen Datei ist, da wir bereits 2 Zeilen auf dem vorherigen Hunk entfernt haben: 2 und 3.Hunk-Header
Je nach Ihrer git - Version und Konfiguration können Sie auch eine Codezeile neben der bekommen
@@
Linie, zum Beispiel desfunc1() {
in:Dies kann auch mit der
-p
Flagge der Ebene erhalten werdendiff
.Beispiel: alte Datei:
Wenn wir die Linie entfernen
6
, zeigt der Unterschied :Beachten Sie, dass dies nicht die richtige Zeile ist für
func1
: Es wurden Zeilen1
und übersprungen2
.Diese großartige Funktion sagt oft genau, zu welcher Funktion oder Klasse jedes Stück gehört, was sehr nützlich ist, um den Unterschied zu interpretieren.
Wie der Algorithmus zur Auswahl des Headers genau funktioniert, wird unter folgender Adresse erläutert: Woher kommt der Auszug im git diff hunk-Header?
quelle
@@ -1,6 +1,4 @@
als "Ab Zeile 1 war die alte Zeilenanzahl 6, aber die neue Zeilenanzahl ist 4"Es sind die aktuellen Informationen zum Hunk-Bereich, die angeben, auf welchen Zeilennummern dieser Diff-Hunk beginnt und endet.
Eine ausführliche Erklärung finden Sie unter http://en.wikipedia.org/wiki/Diff#Unified_format .
quelle