
🧬 Extrae y analiza información de los colaboradores de repositorios git
Herramienta OSINT que extrae identidades — nombres, correos electrónicos y enlaces entre cuentas aparentemente no relacionadas — de repositorios git y GitHub.
gitcolombo.py) — clona repos, recorre git log y puede llamar a la API de GitHub para señales más ricas.gitcolombo.html) — un único archivo HTML estático; ábrelo en un navegador y consulta la API de GitHub directamente, sin instalación.Para el desglose completo de dónde proviene cada correo/nombre (claves PGP, eventos públicos, búsqueda de commits, finales de mensajes de commit, etc.) consulta docs.md.
Alojado en https://gitcolombo.soxoj.com — o abre gitcolombo.html localmente. Un único archivo HTML estático que consulta la API de GitHub directamente desde tu navegador; sin instalación, sin backend.
Requiere Python 3.10+ y un binario git funcional. Sin dependencias externas de Python.
pip install gitcolombo
O desde el código fuente:
git clone https://github.com/Soxoj/gitcolombo
cd gitcolombo
pip install -e .
# desde cualquier URL de git
gitcolombo -u https://github.com/Soxoj/maigret
# desde un directorio local, de forma recursiva
gitcolombo -d ./maigret -r
# clona y escanea cada repositorio público de un usuario/org de GitHub
gitcolombo --nickname octocat
# Solo API: encuentra correos para un nombre de usuario de GitHub sin clonar
gitcolombo --search Soxoj
# cambia dónde se clonan los repos remotos (por defecto: ./repos)
gitcolombo -u https://github.com/Soxoj/maigret --repos-dir ./clones
python -m gitcolombo funciona de manera equivalente si prefieres no poner el script en $PATH.
Los repositorios remotos se clonan en ./repos/ por defecto; anúlalo con --repos-dir. Para clonar por lotes desde grupos de GitLab y Bitbucket usa ghorg.
Los desarrolladores a menudo hacen commits con una identidad (ej. cuenta de trabajo), luego cambian a otra (ej. cuenta personal) y ejecutan git commit --amend, olvidando que esto reescribe el committer pero deja el autor original en su lugar. Los dos roles se separan, y esa discrepancia es exactamente lo que gitcolombo correlaciona.
Explicación breve sobre autor vs. committer: https://stackoverflow.com/questions/18750808/difference-between-author-and-committer-in-git
Suite de pruebas solo con stdlib — sin dependencias externas. Desde la raíz del repositorio (después de pip install -e .):
python3 -m unittest test_gitcolombo -v
La prueba de extremo a extremo crea un repositorio git real en un directorio temporal, por lo que se requiere un binario git funcional (la prueba se omite si falta git).
Las pruebas se ejecutan en cada push y pull request mediante GitHub Actions (.github/workflows/tests.yml) en Python 3.10–3.13.
[email protected], @users.noreply.github.com)