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 — 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 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 principal
  • requirements.txt — dependencias Python (rich, readchar)
  • build.sh — compila el binario con Nuitka
  • .venv/ — virtualenv local (no en git)
  • dist/ — binarios compilados (no en git)
S
Description
Aplicació per escanejar repos gits locals i comprovar el estat
Readme 51 KiB
v1.2.0 Latest
2026-05-19 17:41:19 +02:00
Languages
Python 93.2%
Shell 6.8%