3 ответов:
эти заголовки называются (c)hunk и содержат информацию о диапазоне.
они окружены двойными знаками
@@. Они имеют формат:@@ -l,s +l,s @@здесь
l- это номер стартовой строки иs- это количество строк, к которым применяется изменение (c)hunk для каждого соответствующего файла. Элемент-указывает на исходный файл и+указывает на новый файл (измененный). Обратите внимание, что он показывает не только затронутые строки, но и контекст русло.The
-1,5в исходном файле (обозначается-). Это показывает, что первая строка-это начало и 5 затронутых / контекстных строкThe
+1,9находится в новом (измененном) файле (обозначается+) и снова первая строка-это начало и 9 затронутых / контекстных строк.подробнее здесь:http://en.wikipedia.org/wiki/Diff#Unified_format
простой пример анализа
формат в основном тот же самый
diff -uunified diff.например:
diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$')здесь мы удалили строки 2, 3, 14 и 15. Вывод:
@@ -1,6 +1,4 @@ 1 -2 -3 4 5 6 @@ -11,6 +9,4 @@ 11 12 13 -14 -15 16
@@ -1,6 +1,4 @@означает:
-1,6: этот фрагмент соответствует строке 1-6 первого файла:1 2 3 4 5 6
-означает "старый" , как мы обычно называем его какdiff -u old new.
+1,4говорит, что эта часть соответствует строке 1-4 второго файла.
+означает "новый".у нас есть только 4 строки вместо 6, потому что 2 строки были удалены! Новый ломоть просто:
1 4 5 6
@@ -11,6 +9,4 @@для второго куска аналогично:
в старом файле у нас есть 6 строк, начиная с строки 11 старого файла файл:
11 12 13 14 15 16в новом файле у нас есть 4 строки, начиная с строки 9 нового файла:
11 12 13 16обратите внимание на эту строку
11это 9-я строка нового файла, потому что мы уже удалили 2 строки на предыдущем куске: 2 и 3.заголовок красавчик
в зависимости от вашей версии git и конфигурации, вы также можете получить строку кода рядом с
@@линии, например,func1() {в:@@ -4,7 +4,6 @@ func1() {это также можно получить с помощью
-pфлаг равнинаdiff.пример: старый файл:
func1() { 1; 2; 3; 4; 5; 6; 7; 8; 9; }если мы удалим строку
6, дифф показывает:@@ -4,7 +4,6 @@ func1() { 3; 4; 5; - 6; 7; 8; 9;обратите внимание, что это не правильная линия для
func1: он пропустил строки1и2.Эта удивительная функция часто точно говорит, к какой функции или классу принадлежит каждый кусок, что очень полезно для интерпретации разница.
как именно работает алгоритм выбора заголовка обсуждается по адресу:откуда взялся отрывок в заголовке git diff hunk?
Они описывают линии, на которые влияет diff hunk. В вашем случае это означает, что кусок влияет на 5 строк, начиная с строки 1, в результате чего замена начинается с строки 1, которая составляет 9 строк.
обратите внимание, что это формат, используемый унифицированным форматом diff. "Классический" формат diff использует другую модель (но кто использует классический diff в наши дни?).
Comments