5 git-команд, которые стоит запустить перед чтением чужого кода
Прежде чем читать код — откройте терминал. Пять git-команд покажут, где скапливаются баги, кто ушёл из проекта и какой файл все боятся трогать.
Первое, что стоит сделать при знакомстве с новым проектом — не открывать код, а открыть терминал. Пять git-команд за пару минут покажут, кто писал проект, где скапливаются баги, растёт ли кодовая база или умирает — и какой файл все боятся трогать.
Это перевод статьи Грега Пеховски, консультанта по аудиту кодовых баз. Его подход — диагностика проекта через историю коммитов, прежде чем читать хоть одну строку кода.
Ключевые выводы
- Файлы с наибольшим churn (частотой изменений) — главные кандидаты на рефакторинг и источник багов
- Один человек с 60%+ коммитов — bus factor, а если он ушёл полгода назад — это кризис
- Пересечение churn-файлов и баг-файлов даёт точную карту самого рискованного кода
- Количество коммитов по месяцам показывает, растёт проект или теряет команду
- Частые revert и hotfix — сигнал проблем с CI/CD и тестированием
Что меняется чаще всего
20 самых часто изменяемых файлов за последний год. Файл на первом месте — почти всегда тот, про который предупреждают: «А, этот файл. Его все боятся трогать».
Высокий churn (частота изменений) сам по себе не проблема — иногда это просто активная разработка. Но высокий churn у файла, за который никто не хочет отвечать — самый чёткий сигнал «тормозящего» кода. Это файл, где каждое изменение — патч на патч, а последствия мелкой правки непредсказуемы.
Исследование Microsoft Research 2005 года показало, что метрики на основе churn предсказывают дефекты надёжнее, чем метрики сложности кода. Автор рекомендует взять топ-5 файлов из этого списка и сверить их со списком баг-хотспотов (команда ниже). Файл, который одновременно high-churn и high-bug — главный риск проекта.
Кто это написал
Все контрибьюторы, отсортированные по числу коммитов. Если один человек — автор 60% и более коммитов, это bus factor. Если он ушёл полгода назад — это кризис.
Проверьте, кто активен за последние полгода:
Если топ-контрибьютор за всё время не появляется в полугодовом окне — это красный флаг, который стоит сразу обсудить с командой.
Смотрите и на «хвост» списка: 30 контрибьюторов всего, но только трое активны за последний год. Люди, которые строили систему — не те, кто её поддерживает.
Нюанс: если команда использует squash-merge, команда покажет того, кто мержил, а не того, кто писал код. Уточните стратегию мержа, прежде чем делать выводы.
Где скапливаются баги
Та же структура, что и команда churn, но отфильтрованная по коммитам с ключевыми словами багов. Сравните этот список с churn-хотспотами: файлы, попавшие в оба списка — самый рискованный код. Они постоянно ломаются и постоянно патчатся, но никогда не чинятся по-настоящему.
Качество результата зависит от дисциплины коммит-сообщений. Если команда пишет «update stuff» на каждый коммит — ничего полезного не получите. Но даже грубая карта плотности багов лучше, чем никакой карты.
Проект растёт или умирает
Количество коммитов по месяцам за всю историю репозитория. Ищите паттерны:
- Ровный ритм — здоровый проект
- Резкое падение вдвое за месяц — обычно кто-то ушёл
- Нисходящая кривая за 6-12 месяцев — команда теряет темп
- Всплески с тишиной между ними — пакетные релизы вместо непрерывной поставки
Однажды я показал CTO график коммитов его команды. Он сказал: «Это когда мы потеряли второго senior-инженера». Раньше он не связывал эти события. Это данные о команде, не о коде.
Как часто команда тушит пожары
Частота revert и hotfix. Несколько за год — норма. Откаты каждые пару недель — команда не доверяет своему деплой-процессу. Это симптом глубже: ненадёжные тесты, отсутствие staging или пайплайн, в котором откат сложнее, чем должен быть.
Нулевой результат тоже сигнал: либо команда действительно стабильна, либо никто не пишет описательные коммит-сообщения.
Пять команд, пара минут. Они не расскажут всё, но покажут, какой код читать первым и что искать. Разница между методичным погружением в кодовую базу и бесцельным блужданием по файлам.
Частые вопросы
Работают ли эти команды с monorepo?
Да, но в monorepo результаты будут зашумлены. Добавьте путь к подпроекту в конец команды: git log --format=format: --name-only --since="1 year ago" -- src/backend/ | sort | uniq -c | sort -nr | head -20
Что если команда использует squash-merge?
Команда git shortlog покажет того, кто мержил PR, а не автора кода. Уточните стратегию мержа у команды, прежде чем делать выводы об авторстве. Остальные команды (churn, баги, velocity) работают корректно.
Можно ли автоматизировать эти проверки?
Да. Эти команды легко обернуть в shell-скрипт или интегрировать в CI — например, как проверку при онбординге нового разработчика. Но ценность именно в ручном анализе: цифры без контекста команды мало что значат.
Оригинал: Git commands I run before reading any code, Грег Пеховски.