Вы можете описать, в каком файле получается такой заголовок?
kworr 08
@kworr, это какой-то глупый вопрос, любой diff в едином формате имеет заголовки диапазона.
Yuval Adam
@YuvalAdam: на самом деле в унифицированном формате diff есть больше полей, которые нужно заполнить, например [- +] <position>, <lines>, и здесь у нас нет никаких изменений, но эти изменения касаются первой строки файла.
kworr 08
Ответы:
69
Это унифицированный идентификатор блока различий. Это задокументировано GNU Diffutils.
Унифицированный выходной формат начинается с двухстрочного заголовка, который выглядит следующим образом:
Метка времени выглядит так, 2002-02-21 23:30:39.942229878 -0800чтобы указывать дату, время с долями в секундах и часовой пояс. Дробные секунды опускаются на хостах, которые не поддерживают дробные метки времени.
Вы можете изменить содержимое заголовка с помощью --label=labelопции; см. раздел « Альтернативные имена» .
Затем следуют одна или несколько частей различий; каждый кусок показывает одну область, в которой файлы различаются. Блоки унифицированного формата выглядят так:
@@ номера-строк из файла в номера строк в файле @@
строка-из-любого-файла строка-из-любого-файла ...
Если блок содержит только одну строку, отображается только номер его начальной строки. В противном случае его номера строк выглядят так . Считается, что пустой блок начинается со строки, следующей за блоком.start,count
Если кусок и его контекст содержат две или более строк, номера его строк выглядят так . В противном случае отображается только номер его конечной строки. Считается, что пустой блок заканчивается на строке, предшествующей блоку.start,count
Строки, общие для обоих файлов, начинаются с пробела. Строки, которые фактически различаются между двумя файлами, имеют один из следующих символов индикатора в левом столбце печати:
Ответы:
Это унифицированный идентификатор блока различий. Это задокументировано GNU Diffutils.
источник
Анализ простого примера
Формат в основном такой же, как и у
diff -u
унифицированного diff.Например:
Здесь мы удалили строки 2, 3, 14 и 15. Результат:
@@ -1,6 +1,4 @@
средства:-1,6
означает, что эта часть первого файла начинается со строки 1 и содержит всего 6 строк. Поэтому он показывает строки с 1 по 6.-
означает "старый", как мы обычно его называемdiff -u old new
.+1,4
означает, что эта часть второго файла начинается со строки 1 и содержит всего 4 строки. Поэтому он показывает строки с 1 по 4.+
означает «новый».У нас всего 4 строки вместо 6, потому что 2 строки были удалены! Новый кусок просто:
@@ -11,6 +9,4 @@
для второго ханка аналогично:в старом файле у нас есть 6 строк, начиная со строки 11 старого файла:
в новом файле у нас есть 4 строки, начиная со строки 9 нового файла:
Обратите внимание, что строка
11
является 9-й строкой нового файла, потому что мы уже удалили 2 строки в предыдущем фрагменте: 2 и 3.Заголовок ломтя
В зависимости от версии и конфигурации git вы также можете получить строку кода рядом со
@@
строкой, напримерfunc1() {
in:Это также можно получить с помощью
-p
равниныdiff
.Пример: старый файл:
Если мы удалим строку
6
, разница покажет:Обратите внимание, что это неправильная строка для
func1
: она пропускает строки1
и2
.Эта замечательная функция часто сообщает, к какой функции или классу принадлежит каждый кусок, что очень полезно для интерпретации различий.
Как именно работает алгоритм выбора заголовка, обсуждается в: Откуда берется отрывок в заголовке git diff hunk?
источник
@@ -1,6 +1,4 @@
как «Начиная со строки 1, старое количество строк было 6, а новое - 4»Это информация о текущем диапазоне фрагментов, указывающая, на каких номерах строк начинается и заканчивается этот фрагмент различий.
Прочтите http://en.wikipedia.org/wiki/Diff#Unified_format для более подробного объяснения.
источник