Я збирав дані з поверненої інформації
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 для поглибленого пояснення.