gitfame — консольная утилита для подсчёта статистик авторов Git-репозитория.
Утилита собирает по заданному коммиту информацию по всем строкам файлов (или их подмножеству) и вычисляет для каждого автора:
- Количество строк — число строк, последний коммит, изменивший эти строки, принадлежит автору.
- Количество коммитов — уникальных коммитов, которые вносят изменения в отслеживаемые строки или пустые файлы.
- Количество файлов — число файлов, содержащих строки, соотнесённые с коммитами автора.
Результаты представлены в виде таблички (или в форматах CSV, JSON, JSON Lines) и сортируются по одной из трёх метрик: lines, commits или files.
-
Склонировать репозиторий:
git clone <URL репозитория> cd gitfame
-
Установить бинарь:
go install ./cmd/gitfame/...
-
Добавить
GOPATH/binвPATH(если ещё не сделано):export PATH=$GOPATH/bin:$PATH
После этого команда gitfame будет доступна из любой директории.
gitfame --repository=. --extensions='.go,.md' --order-by=linesПример вывода:
Name Lines Commits Files
Joe Tsai 12154 92 49
colinnewell 130 1 1
... ... ... ...
| Флаг | Описание | По умолчанию |
|---|---|---|
--repository |
Путь до Git-репозитория | . (текущая директория) |
--revision |
Указатель на коммит (SHA, HEAD, теги и т.д.) | HEAD |
--order-by |
Ключ сортировки: одна из lines, commits, files. При равенстве — лексикографически меньший автор |
lines,commits,files |
--use-committer |
Считать в качестве автора не 'Author', а 'Committer' | false |
--format |
Формат вывода: tabular, csv, json, json-lines |
tabular |
--extensions |
Фильтр по расширениям файлов, через запятую, например: .go,.md |
(все файлы) |
--languages |
Фильтр по языкам (go, markdown и т.д.) на основе configs/language_extensions.json. Неизвестные языки игнорируются. |
(все языки) |
--exclude |
Glob-паттерны для исключения файлов, через запятую: foo/*,bar/*.go |
(нет) |
--restrict-to |
Glob-паттерны для включения файлов: учитываются только те, что соответствуют хотя бы одному паттерну | (нет) |
--progress |
Включить отображение прогресса (печатается в stderr) | false |
-
Сосчитать статистику по всем
.goи.mdфайлам в текущем репозитории, сортируя по числу строк:gitfame --extensions='.go,.md' --order-by=lines -
Вывести результат в формате JSON:
gitfame --format=json
-
Подсчитать только для файлов Go, исключив тесты и примеры:
gitfame --extensions='.go' --exclude='*_test.go,examples/*'
go test -v ./gitfame/test/integration/...Для интеграционных тестов используются Git-бандлы (.bundle) из test/integration/testdata/bundles. Чтобы создать свой бандл:
git bundle create my.bundle --allКлонирование в пустую директорию:
git clone /path/to/my.bundle .