Итоги, полученные из `git log --shortstat` vs` git log --numstat`, отличаются друг от друга - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу получить показатели «производительности» кода из репозитория, т. Е. Сводку количества измененных файлов, количества вставок и удалений за время между двумя точками древовидной структуры.

Я сортировал два способа накапливания чисел, читая предложения других людей и документацию git.
Оба выкладывают несколько хороших цифр, однако меня удивляют разные итоги, и я хотел бы знать, почему это так. В одном из моих собственных репозиториев разница довольно велика (в тысячах).

Почему итоговые значения - shortstat vs - numstat отличаются друг от друга, а последний сообщает меньше, чем первый, даже по количеству файлов? Это из-за двоичных файлов, которые - numstat не считает, количество строк контекста при внутреннем изменении или как обрабатываются слияния?

На примере стабильной ветки openssl 1.1.0:

1) Парсинг git log --shortstat

git log --shortstat --no-merges --find-renames --pretty="%H" OpenSSL_1_1_0-pre6..OpenSSL_1_1_0i \
| grep -E "files? changed" \
| awk 'BEGIN {inserted=0; deleted=0} {commits+=1; files+=$1} $5~/^insertions?/ {inserted+=$4} $5~/^deletions?/ {deleted+=$4} $7~/^deletions?/ {deleted+=$6} END {print "commits:", commits, "* files changed:", files, "* insertions(+):", inserted, "* deletions(-):", deleted}'

выплевывает
commits: 1629 * files changed: 8100 * insertions(+): 65709 * deletions(-): 25421

2) Разбор git log --numstat

git log --numstat --no-merges --find-renames --pretty="%H" OpenSSL_1_1_0-pre6..OpenSSL_1_1_0i \
| awk 'NF==1 {commits+=1} NF==3 {files+=1; inserted+=$1; deleted+=$2} END {print "commits:", commits, "* files changed:", files, "* insertions(+):", inserted, "* deletions(-):", deleted}'

выплевывает
commits: 1629 * files changed: 8069 * insertions(+): 65520 * deletions(-): 25402

...