repoman

Utilitat per clonar masivament repositoris de gitea

Lista los repositorios de un usuario u organización en un servidor Gitea, los cruza con los que ya tengas clonados en una carpeta local y te deja clonar los que falten desde una lista navegable.

Uso

repoman /ruta/local [<usuario-o-org>]

El segundo argumento es opcional si tienes default_owner en la config.

Interacción

Una vez dentro de la lista:

Tecla Acción
/ / j / k mover cursor una fila
/ / h / l / PgUp / PgDn pasar de página
g / Home · G / End inicio / final de la lista
Space marcar / desmarcar el repo bajo el cursor
a marcar todos los que aún no estén en local
n desmarcar todo
Enter clonar los marcados (en paralelo)
r refrescar (vuelve a consultar al servidor)
q / Ctrl-C salir

La lista se pagina automáticamente según la altura del terminal, así que con miles de repos sigue respondiendo al instante.

Iconos de estado:

  • ○ remoto — está en el servidor, no clonado localmente
  • ☑ marcado — pendiente de clonar
  • ⟳ clonando… — clone en curso
  • ✓ clonado — éxito
  • ✗ <err> — clone fallido (motivo abreviado)
  • ● en local — ya existía en local
  • ◇ sólo local — está en local pero no en el servidor
  • 🔒 — repo privado

Configuración

Se carga siempre desde ~/.config/repoman/config.toml (respeta XDG_CONFIG_HOME):

[server]
url = "https://gitea.example.com"
# token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"   # opcional, para repos privados
# default_owner = "tu-usuario"                  # opcional, omite el argumento
# clone_protocol = "https"                      # "https" (por defecto) o "ssh"

El token se genera en Gitea en Settings → Applications → Generate New Token con el scope read:repository como mínimo. Sin token sólo verás repos públicos.

Requisitos en el sistema

Necesarios siempre:

  • python3 (≥ 3.11, por tomllib en stdlib)
  • git

Para desarrollar (con venv):

  • python3-venv

Para compilar a binario con Nuitka (./build.sh):

  • python3-dev — cabeceras Python.h
  • gcc — compilador C
  • patchelf — necesario para el modo --onefile en Linux

En Debian/Ubuntu:

sudo apt install python3 python3-venv python3-dev git gcc patchelf

Desarrollo (con venv)

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python repoman.py /ruta/local mi-usuario

Compilar a binario standalone

./build.sh

Genera dist/repoman, un único ejecutable autocontenido (lleva Python, rich y readchar dentro), más un dist/repoman-vX.Y.Z-linux-arch.tar.gz listo para distribuir. Para instalarlo en tu PATH:

cp dist/repoman ~/.local/bin/

Ficheros

  • repoman.py — script principal
  • requirements.txt — dependencias Python (rich, readchar)
  • build.sh — compila el binario con Nuitka
  • README.md — este fichero
  • .venv/ — virtualenv local (no en git)
  • dist/ — binarios compilados (no en git)

Notas

  • La detección de "ya clonado" compara primero la URL del origin con la clone_url/ssh_url del servidor; si no hay match, cae a comparar por nombre. Eso evita falsos positivos cuando tienes carpetas que se llaman igual pero apuntan a otro servidor.
  • Los clones se ejecutan en paralelo (máx. 4 a la vez).
  • Se usa el endpoint GET /api/v1/repos/search?owner=<x> con paginación de 50 en 50, así sirve tanto para usuarios como para organizaciones.
S
Description
Utilitat per clonar masivament repositoris de gitea
Readme 112 KiB
v1.0.5 Latest
2026-05-18 11:59:37 +02:00
Languages
Python 93.2%
Shell 6.8%