
🧬 Extrair e analisar informações de contribuidores de repositórios git
Ferramenta OSINT que extrai identidades — nomes, e-mails e ligações entre contas aparentemente não relacionadas — de repositórios git e GitHub.
gitcolombo.py) — clona repositórios, percorre git log, e pode
chamar a API do GitHub para sinais mais ricos.gitcolombo.html) — um único arquivo HTML estático; abra-o
num navegador e consulte a API do GitHub diretamente, sem instalação.Para a análise completa de onde cada e-mail/nome vem (chaves PGP, eventos públicos, busca de commits, trailers de mensagens de commit, etc.) veja docs.md.
Hospedada em https://gitcolombo.soxoj.com — ou abra gitcolombo.html
localmente. Um único arquivo HTML estático que consulta a API do GitHub diretamente
do seu navegador; sem instalação, sem backend.
Requer Python 3.10+ e um binário git funcional. Sem dependências Python
de terceiros.
pip install gitcolombo
Ou a partir do código-fonte:
git clone https://github.com/Soxoj/gitcolombo
cd gitcolombo
pip install -e .
# a partir de qualquer URL git
gitcolombo -u https://github.com/Soxoj/maigret
# a partir de um diretório local, recursivamente
gitcolombo -d ./maigret -r
# clonar e analisar todos os repositórios públicos de um usuário/org do GitHub
gitcolombo --nickname octocat
# apenas API: encontrar e-mails para um nome de usuário do GitHub sem clonar
gitcolombo --search Soxoj
# alterar onde os repositórios remotos são clonados (padrão: ./repos)
gitcolombo -u https://github.com/Soxoj/maigret --repos-dir ./clones
python -m gitcolombo funciona de forma equivalente, caso prefira não colocar o
script no $PATH.
Repositórios remotos são clonados em ./repos/ por padrão; substitua
com --repos-dir. Para clonagem em lote de grupos do GitLab e Bitbucket
use ghorg.
Desenvolvedores frequentemente fazem commits com uma identidade (ex.: conta de trabalho),
depois trocam para outra (ex.: conta pessoal) e executam git commit --amend,
esquecendo que isso reescreve o committer mas mantém o author original.
Os dois papéis se distanciam, e essa incompatibilidade é exatamente o que o
gitcolombo correlaciona.
Breve explicação sobre autor vs. committer: https://stackoverflow.com/questions/18750808/difference-between-author-and-committer-in-git
Conjunto de testes apenas com stdlib — sem dependências de terceiros. A partir da raiz
do repositório (após pip install -e .):
python3 -m unittest test_gitcolombo -v
O teste de ponta a ponta cria um repositório git real num diretório temporário,
portanto um binário git funcional é necessário (o teste é ignorado se git estiver
ausente).
Os testes são executados a cada push e pull request via GitHub Actions
(.github/workflows/tests.yml) nas versões Python 3.10–3.13.
[email protected], @users.noreply.github.com)