Я збирав дані з поверненої інформації
git diff <commitId>..<commitId>
і я наткнувся на @@ -1 +1 @@
Я не можу зрозуміти, що це мені говорить. Я трохи шукав в Google, але безрезультатно.
Я збирав дані з поверненої інформації
git diff <commitId>..<commitId>
і я наткнувся на @@ -1 +1 @@
Я не можу зрозуміти, що це мені говорить. Я трохи шукав в Google, але безрезультатно.
Відповіді:
Це уніфікований ідентифікатор розрізнення. Це задокументовано GNU Diffutils.
Уніфікований вихідний формат починається з дворядкового заголовка, який виглядає приблизно так:
--- від-файлу від -файла-модифікація-часу +++ до-файла-файла-модифікації-часМарка часу схожа
2002-02-21 23:30:39.942229878 -0800
на позначення дати, часу з дробовими секундами та часового поясу. Дробові секунди опускаються на хостах, які не підтримують дробові позначки часу.Ви можете змінити вміст заголовка за допомогою
--label=label
параметра; див. Див. альтернативні імена .Далі йдуть один або декілька розбіжностей; кожна команда показує одну область, де файли відрізняються. Уніфікований формат виглядає приблизно так:
@@ від-файл-рядок-номери до-файл-рядок-номери @@ рядок-або-файл- рядок-від-будь-якого-файла ...Якщо команда містить лише один рядок, відображається лише номер її початкового рядка. Інакше номери рядків виглядають так . Порожній лук вважається починається на лінії, що йде за ножем.
start,count
Якщо лук та його контекст містять два чи більше рядків, його номери рядків мають вигляд . Інакше відображається лише номер його кінцевої лінії Порожній лук вважається закінченням на лінії, що передує лусці.
start,count
Рядки, спільні для обох файлів, починаються з пробілу. Рядки, які насправді відрізняються між двома файлами, містять один із наступних символьних символів у лівій колонці друку:
- +
Тут було додано рядок до першого файлу.- -
З першого файлу тут видалено рядок.
Простий приклад аналізу
Формат в основному такий же, як diff -u
уніфікований розл.
Наприклад:
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 рядків. Тому він показує рядки 1 - 6.
1
2
3
4
5
6
-
означає "старий", як ми його зазвичай називаємо diff -u old new
.
+1,4
означає, що цей фрагмент другого файлу починається з рядка 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?
@@ -1,6 +1,4 @@
як "Починаючи з 1-го рядка, кількість старих рядків була 6, але кількість нових рядків - 4"
Це поточна інформація про діапазон деталей, яка вказує, на яких номерах рядків починається і закінчується цей різний фрагмент.
Прочитайте http://en.wikipedia.org/wiki/Diff#Unified_format для поглибленого пояснення.