Минималистичная утилита на Go для подсчёта вкладов в репозитории Git: коммиты, добавленные/удалённые строки и чистый вклад (net).
Работает локально, без Python и без внешних зависимостей кроме go-git.
По духу — лёгкий аналог
git-fame: считает по истории коммитов за заданный период и агрегирует по авторам.
- ⏱️ Подсчёт за период (
--since,--until) — даты вYYYY-MM-DDилиRFC3339. - 👤 Фильтр по автору (подстрока имени/почты).
- 🔀 Исключение merge-коммитов по умолчанию (опция
--include-merges). - 📊 Сводная таблица по авторам: commits, added, deleted, net.
- 🧾 Экспорт в CSV (
--csv=out.csv) — удобно для отчётов. - 🧱 Без внешних бинарников: только Go-модуль.
# Клонируем и собираем
git clone https://github.com/4its/git-fame-light.git
cd gitfame-light
go build -o gitfame-light
# или сразу запустить без сборки
go run .Подсчитать вклад по всем авторам в репозитории за период:
./gitfame-light \
--repo=/path/to/repo \
--since=2025-07-21 \
--until=2025-08-21Только для конкретного автора:
./gitfame-light \
--repo=~/dev/finmart-be \
--since=2025-07-21 \
--until=2025-08-21 \
--author="egiazaryan"Сохранить в CSV:
./gitfame-light \
--repo=~/dev/finmart-be \
--since=2025-07-21 \
--until=2025-08-21 \
--csv=stats.csvВключить merge-коммиты (по умолчанию исключены):
./gitfame-light \
--repo=~/dev/finmart-be \
--since=2025-07-21 \
--until=2025-08-21 \
--include-merges| Флаг | Тип | По умолчанию | Описание |
|---|---|---|---|
--repo |
string | . |
Путь к локальному git-репозиторию |
--since |
string | now-30d |
Начало периода (формат YYYY-MM-DD, YYYY-MM-DD HH:MM, либо RFC3339) |
--until |
string | now |
Конец периода (те же форматы; для YYYY-MM-DD берётся 23:59:59 локали) |
--author |
string | пусто | Фильтр по подстроке имени/почты (case-insensitive) |
--include-merges |
bool | false |
Включать merge-коммиты |
--csv |
string | пусто | Путь для сохранения CSV |
Таймзона по умолчанию — Europe/Moscow (можно заменить в коде под свою).
Repo: /Users/george/dev/finmart-be
Period: 2025-07-21T00:00:00+02:00 .. 2025-08-21T23:59:59+02:00 (Europe/Moscow)
Merges: excluded
Author Commits Added Deleted Net
------------------------------------------------------------------
George Egiazaryan 24 914 352 562
Teammate A 17 480 510 -30
(unknown) 1 8 0 8
------------------------------------------------------------------
TOTAL 42 1402 862 540CSV содержит столбцы: author_name,author_email,commits,added,deleted,net + строку TOTAL.
По умолчанию учитываются все изменения. Если нужно считать только, например, *.go — добавь фильтрацию внутри цикла по stats:
if !strings.HasSuffix(strings.ToLower(s.Name), ".go") {
continue
}BASE=~/work/my-group
for repo in "$BASE"/*/.git; do
[ -d "$repo" ] || continue
dir="$(dirname "$repo")"
echo "== $dir =="
./gitfame-light --repo="$dir" --since=2025-07-21 --until=2025-08-21
done- История коммитов берётся через go-git
- Для каждого коммита считаются Patch.Stats() → суммируются Addition/Deletion.
- Мерджи по умолчанию исключаются (часто «шум» для вкладов).
Важно: метрика — это сумма изменений в диффах коммитов, а не текущее число строк в репозитории.
- Переименования считаются как удаление+добавление (git стандарт).
- Бинарные файлы не учитываются в строках.
- Очень большие истории могут считаться долго.
- Фильтр по маскам файлов (--include-glob, --exclude-glob)
- Группировка по директориям/модулям
- Вывод в JSON
- Агрегация по дням/неделям
- Обработка нескольких репозиториев параллельно
MIT © 2025 — George Egiazaryan/4its