Этот инструмент анализирует Git-репозиторий для оценки объективной продуктивности каждого разработчика на основе их вклада в проект. Он учитывает множество факторов, которые могут влиять на статистику, такие как:
- Увольнение и приход новых сотрудников
- Несущественные изменения (например, только отступы или форматирование)
- Squash-коммиты, которые могут изменить историю авторства
- Revert-коммиты
- Сбор и анализ коммитов из любого Git-репозитория
- Определение существенных и несущественных изменений
- Расчет рейтинга полезности для каждого разработчика
- Визуализация результатов через веб-интерфейс или автономный HTML-отчет
- Экспорт статистики в JSON-формат
- Опция игнорирования revert-коммитов
- Настраиваемые веса для параметров оценки полезности
- Возможность исключения разработчиков из отчетов и графиков
- Графический интерфейс пользователя для удобной настройки параметров
- Подробное логирование процесса анализа
- Python 3.7+
- Git
# Клонируем репозиторий
git clone https://github.com/yourusername/git-dev-productivity.git
cd git-dev-productivity
# Устанавливаем зависимости
pip install -e .Или просто установите требуемые зависимости:
pip install gitpython flask pandas matplotlib tkinterДля запуска графического интерфейса используйте:
python run_gui.pyЧерез GUI вы можете:
- Выбрать Git-репозиторий для анализа
- Настроить все параметры анализа
- Установить веса для факторов оценки полезности
- Исключить определенных разработчиков из отчета
- Сгенерировать JSON-отчет и HTML-визуализацию
- Просмотреть журнал работы анализатора
Для анализа через командную строку:
python main.py --repo-path /путь/к/вашему/репозиторию --output-file результаты.json [--ignore-reverts]--repo-path- путь к Git-репозиторию для анализа (обязательный)--output-file- путь для сохранения результатов в JSON (по умолчанию:developer_stats.json)--ignore-reverts- флаг для игнорирования revert-коммитов--start-date- начальная дата для анализа (формат: YYYY-MM-DD)--end-date- конечная дата для анализа (формат: YYYY-MM-DD)--min-changes- минимальное количество изменений для существенного коммита (по умолчанию: 5)
--generate-html- флаг для активации генерации HTML-отчета--html-output-dir- директория, в которую будет сохранен HTML-отчет (по умолчанию:git_stats_report)--inline-html- создать автономный HTML-отчет со встроенными CSS и JavaScript
--weight-substantial-commits- вес для существенных коммитов (по умолчанию: 0.3)--weight-lines- вес для общего количества строк (по умолчанию: 0.15)--weight-impact- вес для влияния коммитов (по умолчанию: 0.25)--weight-substantive-ratio- вес для соотношения существенных коммитов (по умолчанию: 0.2)--weight-revert-penalty- вес для штрафа за revert-коммиты (по умолчанию: -0.1)--weight-daily-activity- вес для ежедневной активности (по умолчанию: 0.2)--weights-file- путь к JSON-файлу с настройками весов
--exclude-developers- список email разработчиков, которых нужно исключить из отчета
--verboseили-v- включить подробное логирование--log-file- файл для сохранения лога
python main.py --repo-path /путь/к/репозиторию --output-file результаты.json --ignore-revertspython main.py --repo-path /путь/к/репозиторию --output-file результаты.json --weight-substantial-commits 0.4 --weight-impact 0.3 --weight-daily-activity 0.1python main.py --repo-path /путь/к/репозиторию --output-file результаты.json --exclude-developers dev1@example.com dev2@example.compython main.py --repo-path /путь/к/репозиторию --output-file results/team_report.json --generate-html --inline-html --html-output-dir reports --exclude-developers dev3@example.com --weight-substantial-commits 0.35 --verboseРейтинг полезности разработчика рассчитывается на основе нескольких факторов с настраиваемыми весами:
-
Существенные коммиты (вес 0.3) - коммиты с достаточным количеством значимых изменений. Отражает способность разработчика делать осмысленные, значимые изменения.
-
Количество строк (вес 0.15) - общее количество добавленных и удаленных строк. Отражает объем выполненной работы.
-
Влияние коммитов (вес 0.25) - комплексная метрика, учитывающая количество измененных файлов и объем изменений. Отражает широту воздействия на кодовую базу.
-
Соотношение значимых коммитов (вес 0.2) - доля существенных коммитов к общему числу. Отражает качество и значимость вносимых изменений.
-
Штраф за реверты (вес -0.1) - отрицательный фактор за отмену своих или чужих изменений. Отражает стабильность и надежность вносимых изменений.
-
Регулярность активности (вес 0.2) - равномерность вклада во времени. Учитывает стабильность работы и вовлеченность в проект.
Анализатор может генерировать HTML-отчеты в двух режимах:
-
Стандартный режим - создает HTML-файл и директорию со статическими файлами (CSS, JavaScript). Требует веб-сервер для корректного просмотра.
-
Режим встраивания (inline) - создает автономный HTML-файл со встроенными CSS и JavaScript, который можно открыть в любом браузере без веб-сервера.
HTML-файл всегда создается с именем, соответствующим имени JSON-отчета, но с расширением .html. Например, если вы указали --output-file team_report.json, HTML-файл будет называться team_report.html.
- Интерактивность - графики и таблицы можно взаимодействовать (сортировка, фильтрация)
- Детальная статистика - полная информация по каждому разработчику
- Управление видимостью - возможность скрывать разработчиков на графиках
- Автономность (в режиме inline) - не требует веб-сервера для просмотра
Результаты анализа сохраняются в JSON-файл со следующей структурой:
{
"metadata": {
"generated_at": "2023-05-01 12:34:56",
"developer_count": 10,
"excluded_developers": ["dev3@example.com"]
},
"team_stats": {
"total_commits": 1500,
"total_substantial_commits": 1200,
"total_lines_added": 50000,
"total_lines_removed": 30000,
...
},
"developers": {
"dev1@example.com": {
"name": "Developer 1",
"email": "dev1@example.com",
"total_commits": 300,
"substantial_commits": 250,
"lines_added": 10000,
...
},
...
},
"usefulness_rating": {
"dev1@example.com": {
"score": 85.42,
"factors": {
"substantial_commits": 90.5,
"lines_contributed": 80.2,
...
},
"factor_descriptions": {
"substantial_commits": "Коммиты с существенными изменениями...",
...
}
},
...
},
"weights_used": {
"substantial_commits": 0.3,
"lines": 0.15,
...
}
}main.py- основной скрипт запускаgui.py- графический интерфейс пользователяcli.py- улучшенный командный интерфейсrun_gui.py- скрипт запуска графического интерфейсаconfig.py- файл конфигурацииgit_collector.py- сбор данных из Git-репозиторияanalyzer.py- анализ собранных данныхoutput_generator.py- генерация JSON-выводаhtml_generator.py- генерация HTML-отчетовutils.py- вспомогательные функцииtemplates/- HTML-шаблоныstatic/- статические файлы (CSS, JavaScript)tests/- модульные тесты
Запуск тестов:
python -m unittest discover testsMIT License