Git: Как оценить вклад человека в мой проект с точки зрения добавления / изменения строк кода? - PullRequest
42 голосов
/ 04 января 2011

У меня есть GIT-репозиторий, и я хочу подсчитать, сколько строк кода было добавлено / изменено одним человеком или группой людей за какой-то период времени. Можно ли рассчитать с помощью git?

Ответы [ 7 ]

79 голосов
/ 04 января 2011

Вы можете использовать git log и немного shell-fu:

git log --shortstat --author "Aviv Ben-Yosef" --since "2 weeks ago" --until "1 week ago" \
    | grep "files\? changed" \
    | awk '{files+=$1; inserted+=$4; deleted+=$6} END \
           {print "files changed", files, "lines inserted:", inserted, "lines deleted:", deleted}'

Объяснение: git log --shortstat отображает краткую статистику о каждом коммите, которая, помимо прочего, показывает количество измененных файлов, вставленных и удаленных строк. Затем мы можем отфильтровать его для конкретного коммиттера (--author "Your Name") и временного диапазона (--since "2 weeks ago" --until "1 week ago").

Теперь, чтобы на самом деле суммировать статистику вместо того, чтобы видеть запись за коммит, мы делаем некоторые сценарии оболочки для этого. Во-первых, мы используем grep для фильтрации только строк с различий. Эти строки выглядят так:

 8 files changed, 169 insertions(+), 81 deletions(-)

или это:

 1 file changed, 4 insertions(+), 4 deletions(-)

Затем мы суммируем их, используя awk: для каждой строки мы добавляем измененные файлы (1-е слово), вставленные строки (4-е слово) и удаленные строки (6-е слово), а затем печатаем их после суммирования всего. *

Редактировать: в верхнем фрагменте были добавлены косые черты, чтобы их можно было скопировать и вставить в командную строку.

17 голосов
/ 04 января 2011

Вы можете генерировать статистику, используя Gitstats . В нем есть раздел «Авторы», в который входит количество строк, добавленных / удаленных 20 лучшими авторами (20 лучших по количеству коммитов).

Редактировать: Есть также Git: Статистика обвинений

3 голосов
/ 01 сентября 2012

Для определенных дат вы можете использовать --since "2012-08-27" --until "2012-09-01"

Like

git log -shortstat - автор "Fabian" - с 2012-08-27 - до "2012-09-01" |grep "файлы изменены" |awk '{files + = $ 1;вставляется + = $ 4;удалено + = $ 6} END {печать "файлы изменены", файлы, "строки вставлены:", вставлены, "строки удалены:", удалены} '

Проверьте это объяснение

http://gitref.org/inspect/

1 голос
/ 20 июля 2018

Я написал некоторый инструмент для этого (https://www.npmjs.com/package/whodid)

$ npm install -g whodid
$ cd your-proj-dir

, а затем

$ whodid --include-merge=false --since=1.week
1 голос
/ 03 июня 2018

Вы можете сделать это:

1) Выполнить:

nano contribution.sh

2) заполнить:

if [ $# -eq 1 ]
then
        git log --author=$1 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' - > logs.txt
        cat logs.txt
else
        echo "ERROR: you should pass username at argument"
fi

3) Выполнить:

chmod +x contribution.sh

4) Теперь вы можете увидеть свой вклад:

./contribution.sh your_git_username
1 голос
/ 02 февраля 2018

Запустите эту команду:

git log --pretty=format:'' --numstat --author 'Lu4' | awk 'NF' | awk '{insertions+=$1; deletions+=$2} END {print NR, "files changed,", insertions, "insertions(+),", deletions, "deletions(+)"}';

Эта команда очень близка к умной в ответ Абикса , но она также обрабатывает крайний случай, найденный Уоллесом Сидре .Иногда фиксация включает только удаления (т.е. без вставок).Команда в ответе abyx неправильно считывает эти удаления как вставки.Команда здесь читает их правильно, потому что она использует --numstat вместо --shortstat.В отличие от --shortstat, --numstat включает как вставки, так и удаления для этих коммитов.

Обратите внимание, что обе команды включают двоичные файлы в число файлов, но исключают количество строк, вставленных и удаленных внутри этих двоичных файлов.


Вот еще один полезный трюк.Создайте файл с именем gitstats с таким содержимым:

#!/usr/bin/env bash

git log --pretty=format:'' --numstat "$@" | awk 'NF' | awk '{insertions+=$1; deletions+=$2} END {print NR, "files changed,", insertions, "insertions(+),", deletions, "deletions(+)"}';

Затем вы можете запустить эту команду с любыми дополнительными опциями до git log.Вот несколько примеров:

./gitstats;
./gitstats --since '1 month ago';
./gitstats --since '1 month ago' --until '1 day ago';
./gitstats --author 'Lu4' --since '1 month ago' --until '1 day ago';

(Конечно, файл может называться не так, как gitstats.)

1 голос
/ 01 сентября 2012

Вы можете попробовать Fisheye / Crucible Atlassian , который интегрируется с Git (а также с другими репозиториями кода). Тогда вклад каждого, в том числе их LOC, отображается публично в легко читаемом веб-приложении. Для небольших групп это тоже довольно дешево.

Откройте источник информации и дайте ей говорить за себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...