
🧬 Извлекать и анализировать информацию о контрибьюторах из git-репозиториев
OSINT-инструмент, который извлекает идентичности — имена, адреса электронной почты и связи между, казалось бы, несвязанными аккаунтами — из git-репозиториев и GitHub.
gitcolombo.py) — клонирует репозитории, обходит git log и может вызывать API GitHub для получения более богатых сигналов.gitcolombo.html) — один статический HTML-файл; откройте его в браузере и запрашивайте API GitHub напрямую, без установки.Полный разбор того, откуда берутся каждый email/имя (PGP-ключи, публичные события, поиск коммитов, трейлеры сообщений коммитов и т. д.) см. в docs.md.
Размещено по адресу https://gitcolombo.soxoj.com — или откройте gitcolombo.html локально. Один статический HTML-файл, который запрашивает API GitHub прямо из вашего браузера; без установки, без серверной части.
Требуется Python 3.10+ и рабочая бинарная программа git. Без сторонних Python-зависимостей.
pip install gitcolombo
Или из исходного кода:
git clone https://github.com/Soxoj/gitcolombo
cd gitcolombo
pip install -e .
# from any git URL
gitcolombo -u https://github.com/Soxoj/maigret
# from a local directory, recursively
gitcolombo -d ./maigret -r
# clone and scan every public repo of a GitHub user/org
gitcolombo --nickname octocat
# API-only: find emails for a GitHub username without cloning
gitcolombo --search Soxoj
# change where remote repos get cloned (default: ./repos)
gitcolombo -u https://github.com/Soxoj/maigret --repos-dir ./clones
python -m gitcolombo работает аналогично, если вы не хотите помещать скрипт в $PATH.
Удалённые репозитории клонируются по умолчанию в ./repos/; переопределите с помощью --repos-dir. Для пакетного клонирования из групп GitLab и Bitbucket используйте ghorg.
Разработчики часто коммитят с одной идентичностью (например, рабочая учётная запись), затем переключаются на другую (например, личную) и запускают git commit --amend, забывая, что это перезаписывает коммиттера, но оставляет первоначального автора на месте. Две роли расходятся, и это несоответствие как раз и коррелирует gitcolombo.
Краткое объяснение разницы между автором и коммиттером: https://stackoverflow.com/questions/18750808/difference-between-author-and-committer-in-git
Тестовый набор на основе только стандартной библиотеки — без сторонних зависимостей. Из корня репозитория (после pip install -e .):
python3 -m unittest test_gitcolombo -v
Сквозной тест создаёт настоящий git-репозиторий во временной директории, поэтому требуется работающая бинарная программа git (тест пропускается, если git отсутствует).
Тесты запускаются при каждом push и pull request через GitHub Actions (.github/workflows/tests.yml) для Python 3.10–3.13.
[email protected], @users.noreply.github.com)