Итоги, полученные из `git log --shortstat` против`git log --numstat`, отличаются друг от друга

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

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

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

Возьмем стабильную ветку openssl 1.1.0 в качестве примера:

1) Разбор git журнала --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 журнала --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

0 ответов

Другие вопросы по тегам