Итоги, полученные из `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