Подтвердить что ты не робот

Что означают цифры в заголовке Git Diff?

Каждый раз, когда я запускаю git diff, для каждого отдельного изменения, которое я сделал, я получаю некоторый заголовок с числами, например:

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

Интересно, что означают четыре цифры? Я предполагаю, что -169 означает, что эта конкретная строка кода, которая следует, первоначально была в строке 169, но теперь находится в 167? А что означают 14 и 12?

4b9b3361

Ответ 1

Этот заголовок называется набор изменений или блок. Каждый блок начинается со строки, содержащей, заключенный в @@, строку или диапазон строк from,no-of-lines в файле до (с -) и после (с +) изменений. После этого идут строки из файла. Строки, начинающиеся с -, удаляются, добавляются строки, начинающиеся с +. Каждая строка, измененная патчем, окружена тремя строками контекста до и после.

Дополнение выглядит так:

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

Это означает, что в исходном файле перед строкой 78 (= 75 + 3 строки контекста) добавьте две строки. Это будут строки с 106 (= 103 + 3 контекста) через 107 после всех изменений.
Обратите внимание на разницу в числах from (-75 и +103), это означает, что в этот файл были внесены другие изменения перед этим конкретным блоком, который добавил 28 (103–75) строк кода.

Удаление выглядит так:

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

Это значит, удалить строку 78 (= 75 + 3 строки контекста) в исходном файле. Неизмененный контекст будет находиться в строках с 75 по 80 после всех изменений.
Обратите внимание, что числа from в этом блоке равны (-75 и +75), это означает, что либо до этого блока не было никаких изменений, либо количество добавленных и удаленных строк в предыдущих изменениях было одинаковым.

Наконец, изменение выглядит следующим образом:

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

Это означает, что перед всеми изменениями измените строку 73 (= 70 + 3 строки контекста) в файле, которая содержит красный на синий. Измененная строка также является строкой 73 (= 70 + 3 строки контекста) в файле после всех изменений.

Кредит принадлежит Маркусу Берто.

Ответ 2

  Интересно, что означают четыре числа?

Давайте проанализируем простой пример

Формат в основном совпадает с унифицированным diff diff -u.

Мы начинаем с цифр от 1 до 16 и удаляем 2, 3, 14 и 15:

diff -u <(seq 16) <(seq 16 | grep -Ev '^(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 по 6.

    1
    2
    3
    4
    5
    6
    

    - означает "старый", так как мы обычно называем его diff -u old new.

  • +1,4 означает, что этот фрагмент второго файла начинается со строки 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.

Ответ 3

Резюме:

  • Предположим, что git diff выведет [0-3] строки контекста [до/после] [первый/последний] изменения

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