2011-06-28 17 views
37

każdym razem uruchomić git diff, dla każdej pojedynczej zmiany zrobiłem, mam jakiś cel z numerami, na przykład:Co oznaczają liczby w nagłówku Git Diff?

@@ -169,14 +167,12 @@ function Browser(window, document, body, XHR, $log) {..... 

zastanawiam się co robi cztery cyfry oznaczają? Przypuszczam, że -169 oznacza, że ​​ten konkretny wiersz kodu jest pierwotnie w linii 169, ale teraz jest w 167? A co oznaczają 14 i 12?

Odpowiedz

38

Nagłówek nazywa się zestawem zmian lub przystojniakiem. Każdy kawałek zaczyna się od linii, która zawiera, zamknięta w @@, linię lub linię from,no-of-lines w pliku przed (z -) i po (z +) zmianami. Potem przychodzą linie z pliku. Linie rozpoczynające się od - są usuwane, dodawane są linie zaczynające się od +. Każda linia zmodyfikowana przez łatę jest otoczona 3 liniami kontekstu przed i po.

Dodatek wygląda następująco:

@@ -75,6 +103,8 @@ 
foo 
bar 
baz 
+line1 
+line2 
more context 
and more 
and still context 

Oznacza to, że w pliku pierwotnego przed linią 78 (= 75 + 3 linie kontekstu) dodano dwie linie. Będą to linie 106 (= 103 + 3 linie kontekstu) do 107 po wszystkich zmianach.
Zauważ różnicę w liczbach from (-75 vs +103), co oznacza, że ​​przed tym konkretnym przystojnikiem były inne zmiany, które dodały 28 (103 - 75) linii kodu.

delecja wygląda następująco:

@@ -75,7 +75,6 @@ 
foo 
bar 
baz 
-line1 
more context 
and more 
and still context 

Oznacza to, że usunięcie linii 78 (= 75 + 3 linie kontekstu) w pierwotnego pliku. Kontekst niezmieniony będzie występował w liniach od 75 do 80 po wszystkich zmianach.
Należy pamiętać, że numery from w tym miejscu są takie same (-75 i +75), oznacza to, że albo nie było żadnych zmian przed tym przystojniakiem, albo ilość dodanych i usuniętych linii w poprzednich zmianach była taka sama.

Wreszcie zmiana wygląda tak:

@@ -70,7 +70,7 @@ 
foo 
bar 
baz 
-red 
+blue 
more context 
and more 
still context 

Oznacza to, że zmiana linii 73 (= 70 + 3 linie) w kontekście pliku przed wszystkimi zmianami, które zawiera czerwonego na niebieski. Zmieniona linia to także wiersz 73 (= 70 + 3 wiersze kontekstu) w pliku po wszystkich zmianach.

Credit goes to Markus Bertheau.

+7

Krótka odpowiedź: 14 w Twoim przypadku jest kwota linii w przystojniaku przed zastosowaniem zmian, 12 - po. –

+5

Wartości "no-of-lines' mogą nie być od razu oczywiste. Wartość "before" jest sumą 3 linii tekstu lead, liczby linii '-' i 3 linii kontekstowych, podczas gdy wartości 'after' są sumą 3 linii kontekstowych lead, liczba' + 'linie i 3 linie końcowe. W niektórych przypadkach istnieją dodatkowe pośrednie linie kontekstowe, które również są dodawane do tych liczb. Zatem całkowita liczba wyświetlanych linii nie jest zwykle żadną wartością "no-of-lines"! –

+3

Jest czerwony śledzia w pierwszym przykładzie dodawania 2 linii: '@@ -75,6 +77,8 @@'. 75 i 77 mogą pomylić początkującego, aby pomyśleć, że było to związane z dodaniem 2 linii. W rzeczywistości prostszy przykład miałby po prostu '@@ -75,6 +75,8 @@". +77 byłby tylko wtedy, gdyby były inne edycje wyżej, które dodałyby sieć 2 linii. – wisbucky

3

Podsumowanie:

  • Załóżmy git diff wyjściowe będzie [0-3] linie kontekstu [przed/po] [imię /] zmienia

@@ - [original file's number of first line displayed] [context lines + removed lines ] + [changed file's number of first line displayed], [context lines + added lines] @@

4

zastanawiam się co robi cztery cyfry oznaczają?

Przeanalizujmy prosty przykład

Format jest w zasadzie takie samo Tak diff -u unified diff.

rozpoczynamy o numerach od 1 do 16 i usunąć 2, 3, 14 i 15:

diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$') 

wyjściowa:

@@ -1,6 +1,4 @@ 
1 
-2 
-3 
4 
5 
6 
@@ -11,6 +9,4 @@ 
11 
12 
13 
-14 
-15 
16 

@@ -1,6 +1,4 @@ oznacza

  • -1,6: ten fragment odpowiada wierszom od 1 do 6 pierwszego pliku:

    1 
    2 
    3 
    4 
    5 
    6 
    

    - oznacza "stary", jak zwykle wywołujemy go jako diff -u old new.

  • +1,4 mówi, że ten fragment odpowiada linii od 1 do 4 drugiego pliku.

    + oznacza "nowy".

    Mamy tylko 4 linie zamiast 6, ponieważ usunięto 2 linie! Nowy przystojniak tylko:

    1 
    4 
    5 
    6 
    

@@ -11,6 +9,4 @@ na drugi przystojniak jest analogiczna:

  • na starym pliku, mamy 6 linii, zaczynając od linii 11 starego pliku:

    11 
    12 
    13 
    14 
    15 
    16 
    
  • na nowym pliku, mamy 4 linie, zaczynając od linii 9 nowego pliku:

    11 
    12 
    13 
    16 
    

    Uwaga ta linia 11 to 9 linia nowego pliku, ponieważ mamy już usunięte 2 linie na poprzedniej porcji: 2 i 3.