Об этом проекте

`git-stats` — это инструмент командной строки, написанный на Rust, который анализирует информацию из `git log` для получения агрегированной статистики коммитов. Он читает репозиторий напрямую с помощью `gitoxide`, чистой реализации git на Rust, что исключает необходимость в бинарном файле git. ## Возможности - **Агрегированная статистика**: Сводка по авторам с указанием количества коммитов, изменённых файлов, вставок, удалений и нетто-изменений строк. - **Диапазоны ревизий**: Поддержка одиночных ревизий, диапазонов `A..B` и `A...B`, где конечные точки задаются как ссылки, короткие хеши, `@{n}` и т.д. - **Фильтрация**: Ограничение по автору (регулярное выражение), диапазону дат (`--since`, `--until`) и диапазону ревизий. - **Отслеживание рецензий**: Опциональный показ рецензентов/тестировщиков на основе git-трейлеров `Acked-by`, `Tested-by` и `Reviewed-by`. - **Сортировка**: Сортировка по любой колонке (автор, коммиты, файлы, вставки, удаления, нетто) по возрастанию или убыванию. - **Отображение email**: Опциональный показ адресов электронной почты авторов. ## Установка Установка из crates.io: ``` cargo install git-stats --locked ``` Или с помощью `cargo-binstall` для предварительно собранных бинарных файлов: ``` cargo binstall git-stats ``` В Arch Linux используйте пакеты AUR `git-stats` (исходный код) или `git-stats-bin` (предварительно собранный). С помощью `mise` установите предварительно собранный бинарный файл с проверкой контрольной суммы и происхождения SLSA: ``` mise use -g github:lukehsiao/git-stats ``` ## Использование ``` Использование: git-stats [ОПЦИИ] [диапазон-ревизий] Аргументы: [диапазон-ревизий] Показывать только коммиты в указанном диапазоне ревизий [по умолчанию: HEAD] Опции: -e, --email Показать адрес электронной почты каждого автора -r, --reviews Показать, кто рецензировал/тестировал коммиты на основе git-трейлеров -s, --sort <СОРТ> По какой колонке сортировать [по умолчанию: commits] [возможные значения: author, commits, files, insertions, deletions, net] --reverse Обратный порядок сортировки -a, --author <АВТОР> Ограничить коммиты теми, которые соответствуют шаблону регулярного выражения --since <С> Ограничить коммиты более новыми, чем дата --until <ДО> Ограничить коммиты более старыми, чем дата -h, --help Показать справку -V, --version Показать версию ``` Пример вывода: ``` $ git stats -r origin..HEAD Автор Коммиты Изменённые файлы Вставки Удаления Нетто Δ Luke Hsiao 67 117 +2616 -1126 +1490 dependabot[bot] 31 62 +203 -267 -64 Итого 98 179 +2819 -1393 +1426 Рецензент/Тестировщик Коммиты Luke Hsiao 1 ``` ## Примечания - **Диапазоны ревизий**: Поддерживаются только простые формы; экзотический синтаксис gitrevisions(7) не интерпретируется. - **Фильтрация по дате**: Принимает ISO 8601, RFC 2822, unix-временные метки и относительные даты, такие как "2 недели назад". Фильтрация выполняется по дате коммиттера. - **Сопоставление авторов**: Сопоставляется с автором, разрешённым через mailmap, в отличие от `git log --author`, который использует необработанные заголовки. - **Merge-коммиты**: Учитываются как коммиты, но не вносят изменений в строки/файлы. - **Неполные клоны (shallow clones)**: Работают, но статистика может отличаться от полных клонов; выводится предупреждение. - **Подмодули**: Учитываются как один изменённый файл, с небольшими расхождениями в обработке переименований git. - **Подсчёт строк**: Из diff-движка gitoxide, может незначительно отличаться от git в некоторых фрагментах. - **Репозитории SHA-256**: Не поддерживаются (ограничение gitoxide). - **Кодировки коммитов**: Кодировки, отличные от UTF-8, не преобразуются; имена авторов могут содержать символы замены.