Как получить полные добавления и удаления в данной ветке для данного автора в git
Есть ли способ в git подсчитать общее количество удалений и добавлений для данного пользователя в данной ветки? Что-то вроде этого на github, в разделе графика есть диаграмма, которая показывает вам полные добавления и удаления, но только на главной ветке... Я думаю, что если бы они сделали это, это можно было бы в git также, кто-то знает, как это сделать?
Спасибо заранее.
Ответы
Ответ 1
Я не думаю, что Git имеет встроенную команду, которая делает это. Но с помощью некоторых других стандартных утилит это можно сделать. Вот пример, который фильтрует Git вывод журнала через awk, чтобы получить сводку итоговых вложений и удалений:
git log --author=$USER --shortstat $BRANCH | \
awk '/^ [0-9]/ { f += $1; i += $4; d += $6 } \
END { printf("%d files changed, %d insertions(+), %d deletions(-)", f, i, d) }'
Ответ 2
Я перевернул свой собственный, основанный на этом, чтобы рассмотреть случай с более новым git, где 0 вложений или исключений не печатается:
git log --author=$USER --shortstat $BRANCH |
ruby -e 'puts $<.read.scan(/(\d+) \w+\(([+-])\)/).group_by(&:last).
map{|s,ds|s+ds.map(&:first).map(&:to_i).inject(0,&:+).to_s}.join(", ")'
Это просто печатает итоговые значения вставки и удаления, например: +7108, -6742
Если вы хотите, чтобы файлы тоже изменились, эта небольшая версия hacky¹ будет делать:
git log --author=$USER --stat=99999999 $BRANCH |
ruby -e 'f,a,d = $<.read.scan(/^ (.*?)\s+\|\s+\d+\s(\+*)(\-*)$/).transpose;
puts [f.uniq.length, " files, +", a.join.length, ", -", d.join.length].join'
Результат выглядит следующим образом: 97 files, +3701, -3598
Общее количество файлов - это количество уникальных имен файлов во всех коммитах, а не сумма количества файлов, измененных в каждой фиксации, что и дает исходный ответ.
¹ Дело 999…
заключается в том, что мы буквально подсчитываем количество +
и -
s, и нам нужно git не ограничивать их шириной по умолчанию, поэтому мы даем ему очень длинный ширину для работы с.