Как использовать короткий список git для агрегирования статистики коммитов пользователей по нескольким репозиториям в одном каталоге? - PullRequest
2 голосов
/ 24 января 2020

У меня есть каталог с большим количеством подкаталогов репо Git, и я хотел бы накапливать информацию, аналогичную

git shortlog -sne --no-merges

, для всех репозиториев в нем, сортируя пользователей по всем их общим коммитам .

например, для репо 1:

430 Author 1 <author1@email.com>
 20 Author 2 <author2@email.com>

например, для репо 2:

123 Author 1 <author1@email.com>
 92 Author 2 <author2@email.com>

общий результат:

453 Author 1 <author1@email.com>
112 Author 2 <author2@email.com>

Можно ли сделать это с помощью git встроенных инструментов?

Я смог go за пределами папок репо и запустить его для одной папки:

git -C repoFolder shortlog -sne --no-merges

1 Ответ

5 голосов
/ 24 января 2020

cd в al oop в каждый подкаталог и обработайте git shortlog вывод с awk:

for d in *; do git -C $d shortlog -ens --no-merges; done |
    awk '{name_email=""; for (i=2; i<=NF; i++) {name_email=name_email " " $i}; count_by_user[name_email]+=$1} END {for (name_email in count_by_user) print count_by_user[name_email], name_email}'

Сценарий awk объяснил:

name_email="";

Для каждой строки ввода: начните с пустой переменной name_email.

for (i=2; i<=NF; i++) {name_email=name_email " " $i};

Объедините все поля, начиная с двух пробелов, в name_email. Т.е. объедините все поля name + email.

count_by_user[name_email]+=$1

Создайте новый ассоциативный массив count_by_user и в каждой строке увеличивайте значение (по умолчанию 0) на значение первого поля (количество коммитов).

END {for (name_email in count_by_user) print count_by_user[name_email], name_email}

По окончании распечатки: пропустите count_by_user индексы (имя + адрес электронной почты), распечатайте рассчитанный счетчик, напечатайте имя + адрес электронной почты. Результаты печатаются несортированными. Может быть отсортировано по самому сценарию awk или постобработано с | sort -nr.

Разработано с gawk версией awk.

...