3 ответов:
это унифицированный идентификатор diff hunk. Это документирована ПО GNU Diffutils.
унифицированный формат вывода начинается с двухстрочного заголовка, который выглядит следующим образом:
--- from-file from-file-modification-time +++ to-file to-file-modification-timeотметка времени выглядит как
2002-02-21 23:30:39.942229878 -0800для указания даты, времени с дробными секундами и часового пояса. Дробные секунды опущены на хостах, которые не поддерживают дробные метки времени.вы можете изменить содержимое заголовка с помощью ; см. Альтернативные Имена.
далее идут один или несколько кусков различий; каждый кусок показывает одну область, где файлы отличаются. Унифицированный формат куски выглядят так:
@@ from-file-line-numbers to-file-line-numbers @@ line-from-either-file line-from-either-file...если ломоть содержит только одну строку, появляется только его номер стартовой строки. В противном случае его номера строк выглядят как
start,count. Считается, что пустой кусок начинается с линии, которая следует за куском.если кусок и его контекст содержат два или более линии, его номера строк выглядят как
start,count. В противном случае отображается только его номер конечной строки. Считается, что пустой кусок заканчивается на линии, которая предшествует куску.строки, общие для обоих файлов, начинаются с символа пробела. Строки, которые на самом деле отличаются между двумя файлами, имеют один из следующих символов индикатора в левом столбце печати:
- +
Здесь в первый файл была добавлена строка.- -
Здесь была удалена строка из первого файла.
простой пример анализа
формат в основном тот же самый
diff -uunified diff.например:
diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')здесь мы удалили строки 2, 3, 14 и 15. Вывод:
@@ -1,6 +1,4 @@ 01 -02 -03 04 05 06 @@ -11,6 +9,4 @@ 11 12 13 -14 -15 16
@@ -1,6 +1,4 @@означает:
-1,6: этот фрагмент соответствует строке 1-6 первого файла:01 02 03 04 05 06
-означает "старый" , как мы обычно называем его какdiff -u old new.
+1,4говорит, что эта часть соответствует строке 1-4 второго файла.
+означает "новый".у нас есть только 4 строки вместо 6, потому что 2 строки были удалены! Новый ломоть просто:
01 04 05 06
@@ -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?
Это текущая информация о диапазоне куска, указывающая, на каких строках начинается и заканчивается этот разный кусок.
Читать http://en.wikipedia.org/wiki/Diff#Unified_format для подробного объяснения.
Comments