Как рассчитать измененную строку по git? - PullRequest
0 голосов
/ 25 октября 2018

Когда я использую git log - -stat, я могу получить «файл изменен, добавлен и удален».Однако я хочу посчитать, сколько строк изменилось.Например:

git log --stat
-  Print “hello world”;
-  int a;
-  int b;
-  String name;
-  print "a"
+  Print “Hello, World!”
1 file changed, 1 addition, 5 deletions.

Это 1 измененное место, но Git просто говорит мне, что есть 1 добавление и 5 удалений.Я хочу получить:

git log --stat
-  Print “hello world”;
-  int a;
-  int b;
-  String name;
-  print "a"
+  Print “Hello, World!”
1 file changed, 0 addition, 4 deletions, 1 modify

Как я могу автоматически рассчитать количество измененных строк с помощью Git?

Я пробовал git log -p, это выглядит так:

git log -p
-  Print “hello world”;
-  int a;
-  int b;
-  String name;
-  print "a"
+  Print “Hello, World!”

Итак, мне нужно проверить это один за другим.Есть ли у git метод для вычисления измененных строк?

1 Ответ

0 голосов
/ 26 октября 2018

Что касается внутреннего алгоритма различий в Git, ни одна строка не меняется .Это либо там, либо не там.Если его там нет и было раньше, его удалили.Если его не было раньше и сейчас, он был вставлен.Если оно было и есть, оно остается неизменным.

Существуют другие алгоритмы и постпроцессоры для вывода Git diff, которые будут пытаться найти «похожие» строки в удаленных / добавленных разделах ипоказать их как изменения в строке.Но сам Git просто не делает этого.

(Причина в том, что для производительности Git рассматривает каждую строку как один символ. Сам символ может игнорировать пробелы или иметь несколько других специальных обработок. Вы также можетепусть Git рассматривает каждое «слово» как символ, так что он сравнивает одно слово за раз и производит пословную разность. Все это входит в один из четырех разностных механизмов внутри Git. Подробнее об этом см.последний раздел главы 3 моей незаконченной книги .)

...