gitswarm
TUI para listar y actualizar repos git de primer nivel dentro de una carpeta. Soporta muchos repos (paginación automática) y nunca se bloquea pidiendo credenciales.
Uso
gitswarm /ruta/a/escanear
Te muestra una tabla paginada con todos los repos detectados y un cursor para navegarlos. La paginación se ajusta sola al alto del terminal.
Atajos
| Tecla | Acción |
|---|---|
↑ ↓ j k |
mover cursor |
← → h l |
cambiar de página |
g G |
inicio / final |
Space |
marcar/desmarcar el repo bajo el cursor |
a n |
marcar todos los que estén behind / desmarcar todos |
Enter |
git pull --ff-only en los marcados (en paralelo) |
s |
mostrar git status del repo bajo cursor |
c |
commit en el repo bajo cursor (git add -A + mensaje) |
r |
refrescar (re-fetch) |
? |
ayuda |
q |
salir (también Ctrl-C / Ctrl-D) |
El estado se calcula con git fetch al arrancar y en cada refresh. Enter aborta cualquier repo con cambios locales sin commitear.
Robustez de red
gitswarm nunca se cuelga: ejecuta git con timeouts cortos (SSH ConnectTimeout=5, HTTP aborta si no llegan datos en 10s, fetch global cap de 30s), GIT_TERMINAL_PROMPT=0 y askpass desactivado. Cada repo problemático se marca y se pasa al siguiente:
- 🔒
auth— el repo necesita credenciales que no están configuradas. - 🔌
sin red— el host del remote no resuelve, no responde o tarda demasiado. ERROR: …— fallo de git distinto a los anteriores.
Credenciales (repos privados)
Para que funcionen los repos privados, configura un credential helper de git una sola vez (no es trabajo de gitswarm, esto es la forma estándar de git):
# Opción 1 — store sencillo en disco (~/.git-credentials, sin cifrar):
git config --global credential.helper store
# Opción 2 — libsecret (gnome-keyring, KDE wallet, etc., recomendado en Linux):
sudo apt install libsecret-1-0 libsecret-1-dev
sudo make -C /usr/share/doc/git/contrib/credential/libsecret
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
La primera vez que hagas git pull a mano sobre un repo privado, git te pedirá usuario/token y el helper lo guardará. A partir de ahí gitswarm puede actualizarlo sin intervención.
Para repos por SSH lo equivalente es tener la clave cargada en ssh-agent.
Requisitos en el sistema
Necesarios siempre:
python3(≥ 3.10)git
Para desarrollar (con venv y dependencias pip-installed):
python3-venv
Para compilar a binario con Nuitka (./build.sh):
python3-dev— cabecerasPython.hgcc— compilador Cpatchelf— necesario para el modo--onefileen 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 gitswarm.py /ruta/a/escanear
Compilar a binario standalone
./build.sh
Genera dist/gitswarm, un único ejecutable autocontenido (lleva Python + rich + readchar dentro). Para instalarlo en tu PATH:
cp dist/gitswarm ~/.local/bin/
Ficheros
gitswarm.py— script principalrequirements.txt— dependencias Python (rich,readchar)build.sh— compila el binario con Nuitka.venv/— virtualenv local (no en git)dist/— binarios compilados (no en git)