CSS for code highlight

03 июня 2023

Git статистика - количество строк, закоммиченных автором(и) (git, awk, sed)

Стало интересно посмотреть на число закоммиченных строк, решение было найдено на stackoverflow

Немного допилим, и получаем...

Статистика по одному автору:

git log --author="_Your_Name_Here_" --pretty=tformat: --numstat \
| gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -

Статистика по всем авторам:

while read i; do git log --author="$i" --pretty=tformat: --numstat | { printf "$i: "; gawk ' { add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -; }; done < <(git shortlog -sne | sed 's/[^<]*<\([^>]*\)>/\1/' | sort -u)

Добавим немного форматирования в printf, для удобочитаемого вывода в виде таблицы, в sed добавим регулярки для откидывания неинформативных записей /^[0-9]\+$/d и удалим в email домены s/@.\+$// оставив только логины, отсортируем по количеству закоммиченных строк в обратном порядке и пронумеруем результат:

printf '\n%+8s%-22s%-14s%-16s%-16s\n' "N  " "Author" "Added lines" "Removed lines" "Total difference"; while read i; do git log --author="$i" --pretty=tformat: --numstat | { printf "%-22s" $i; gawk ' { add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "%-14s%-16s%-16s\n",add,subs,loc }' -; }; done < <(git shortlog -sne | sed 's/[^<]*<\([^>]*\)>/\1/;/^[0-9]\+$/d;s/@.\+$//' | sort -u) | sort -k2 -rn | nl

Получим примерно такой результат:

     N  Author                Added lines   Removed lines   Total difference
     1  xxxxxxxxx             13494692      13494560        132
     2  xxxxxxxx              8090827       7829892         260935
     3  xxxxxxxx              361988        11762           350226
     4  xxxxxxxxxx            254424        15293           239131
     5  xxxxxxxxxxxx          161590        50013           111577
     6  xxxxxxxx              82727         72846           9881
     7  sa_zakharov           77518         27475           50043
     8  xxxxxxxxx             70492         8776            61716
     9  xxxxxxxxxx            52863         22576           30287
    10  xxxxxxxxxx            39434         14333           25101
...

Сделаем вывод в CSV файл - изменим формат вывода в printf, перенаправим вывод в файл ~/Desktop/Projects/git-stat.csv

(echo "N,Author,Added lines,Removed lines,Total difference"; while read i; do git log --author="$i" --pretty=tformat: --numstat | { printf "$i, "; gawk ' { add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "%s, %s, %s\n",add,subs,loc }' -; }; done < <(git shortlog -sne | sed 's/[^<]*<\([^>]*\)>/\1/;/^[0-9]\+$/d;s/@.\+$//' | sort -u) | sort -k2 -rn | nl | sed 's/^\s\+//;s/^\([0-9]\+\)\s\+/\1,/;s/,\s\+/,/g' ) > ~/Desktop/Projects/git-stat.csv

Полученный CSV файл можно открыть в Excel / LibreOffice и др. программмах, отсортировать, построить диаграммы и т.п.

Так же, количество коммитов по пользователям:

git log --pretty=format:%ae \
| gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }' | sort -k1 -rn

Cсылки:
[1] stackoverflow: Git - Is there a way to view the number of lines committed by Author?
[2] stackoverflow: Which Git commit stats are easy to pull?
Так же есть и другие средства для построения статистики по Git:
[3] GitStats project - генератор статистики по истории git, cмотрите каталог примеров статистики, сгенерированной для различных проектов.
[4] How to use GitStats in Windows: A step-by-step tutorial
[5] GitStats — замечательная статистика для git-репозитория
[6] LookAtGit is a program to extract commit statistics from a git source control repo. It may also be used with other repos provided you first convert them to git, for example, using git-svn.
[7] Git stats & graphs - визуализация истории git онлайн по json файлу сгенерированному утилитой gitstat
[8] Gitinspector is a statistical analysis tool for git repositories. The default analysis shows general statistics per author, which can be complemented with a timeline analysis that shows the workload and activity of each author. (проект очень давно не обновлялся)

Комментариев нет:

Отправить комментарий

Последнее...

CURL вместо Postman / Swagger