Inicio InformáticaGnu/LinuxGit remote updater (cli), automatiza la migración de repositorios (dry-run + selección por usuario)

Git remote updater (cli), automatiza la migración de repositorios (dry-run + selección por usuario)

Publicado por
Publicado el: Última actualización:
about git remote updater cli

Una vez más aquí. Hoy vengo a dejar un pequeño artículo sobre algo que me pasó estos días. La cosa es que hace años que publico cosas en Github en diferentes cuentas, pero la cuenta con la que publico las cosas que dejo en esta web, tenía como nombre de usuario sapoclay (un nick que tiene como 26 años), pero que para publicar cosas relacionadas con esta web, tenía poco que ver. El caso es que hace como cinco o seis años, me hice otra cuenta con el nombre de entreunosyceros, pero no subí ningún contenido. Ayer recordé que no había razón para seguir utilizando el nick sapoclay en GitHub. Por este motivo entre ayer y hoy me hice estepequeño script en bash que vamos a ver, llamado git remote updater. Ya que si cambias el nombre de usuario en la cuenta de GitHub, los repositorios remotos que tienes alojado en tu equipo, siguen manteniendo el nombre de usuario antiguo. Y actualmente tengo como unos 160 repositorios remotos en este equipo, por lo que cambiar el nombre de usuario uno por uno, era una tarea en la que no me quería ver metido.

Como decía, gestionar múltiples repositorios Git puede volverse complicado cuando necesitas hacer cambios globales, como actualizar el usuario de GitHub en las URLs remotas. Este problema es especialmente frecuente cuando se reorganizan cuentas, se migran proyectos o se cambia el nombre de usuario en plataformas como GitHub, como ha sido el caso que me ocupa.

En lugar de editar cada repositorio manualmente (cosa terriblemente tediosa), es posible automatizar este proceso con un script en Bash que no solo detecta repositorios automáticamente, sino que además permite decidir cuáles modificar de forma interactiva. Y todo ello con unas 97 líneas de código.

En las siguientes líneas, vamos a ver cómo funciona esta herramienta y cómo utilizarla de forma segura, para no encontrarnos con problemas repentinos.


El problema: actualizar remotos Git uno por uno

Cuando se trabaja con múltiples proyectos, cada repositorio Git mantiene una URL remota configurada en origin. Si el usuario cambia, por ejemplo:

git@github.com:usuario-antiguo/proyecto.git

a:

git@github.com:usuario-nuevo/proyecto.git

entonces todos los repositorios locales deben actualizar su configuración para poder seguir funcionando sin problemas.

El comando manual que habría que utilizar para solucionarlo sería:

git remote set-url origin nueva_url

El problema es evidente; repetir este proceso en decenas o cientos de repositorios no es eficiente ni seguro.


La solución: automatización con control interactivo usando Git remote updater

El script que vamos a ver resuelve este problema con tres pilares fundamentales:

  • 🔍 Detección automática de repositorios Git (.git)
  • 🔄 Actualización de remotos basada en reemplazo de usuario
  • 🧑‍💻 Interacción manual para decidir qué repositorios modificar

Esto permite mantener control total sin perder automatización. Hay que aclarar que el script funciona dentro de las carpetas que estén contenidas en la carpeta desde donde se ejecute el script. Ya que hace búsqueda recursiva infinita hacia abajo.


Cómo funciona el script

git remote updater (cli) ayuda

El funcionamiento general es el siguiente:

  1. Escanea recursivamente el directorio actual en busca de repositorios Git
  2. Ignora carpetas como:
    • node_modules
    • venv
    • .venv
    • vendor
  3. Detecta el remoto origin
  4. Comprueba si contiene el usuario antiguo
  5. Muestra la comparación entre la URL antigua y la nueva
  6. Permite al usuario decidir qué hacer:
    • y → aplicar cambio
    • n → saltar
    • a → aplicar automáticamente al resto
    • q → salir del proceso

🧪 Modo seguro: dry-run

Antes de realizar cambios reales, el script permite ejecutar un modo simulación, con la idea de no romper nada:

--dry-run

En este modo:

  • No se modifica ningún repositorio
  • Solo se muestra lo que ocurriría
  • Permite validar el comportamiento antes de actuar

Esto es especialmente importante en entornos con muchos proyectos.


Ejemplo de uso

Ejecución en modo interactivo

./script.sh --old usuario-antiguo --new usuario-nuevo

Durante la ejecución, el script mostrará algo como:

📁 ./proyectos/api
OLD: git@github.com:usuario-antiguo/api.git
NEW: git@github.com:usuario-nuevo/api.git

👉 ¿Aplicar cambio? [y]es / [n]o / [a]ll / [q]uit:

Casos de uso en los que me parece que puede ser útil

Este script creo que puede ser especialmente útil en situaciones como:

  • Migración de cuenta de GitHub
  • Cambio de nombre de usuario en la cuenta de GitHub
  • Reestructuración de repositorios personales o profesionales
  • Limpieza de entornos de desarrollo locales
  • Administración de múltiples proyectos en distintas carpetas
  • Automatización de mantenimiento en entornos de desarrollo

Seguridad y control

Una de las ventajas más importantes de esta herramienta es el control:

  • No realiza cambios sin confirmación
  • Permite revisión caso por caso
  • Permite aplicar cambios masivos con una sola acción (a)
  • Incluye modo simulación para evitar errores

Esto lo hace adecuado incluso para entornos con muchos repositorios críticos.


Detalles técnicos relevantes

El script utiliza varias técnicas de Bash:

  • find para detección recursiva de repositorios
  • Filtrado de directorios pesados para optimizar rendimiento
  • sed para reemplazo seguro de URLs
  • Control de flujo interactivo con read
  • Manejo de errores con set -euo pipefail

Además, es compatible con URLs SSH y HTTPS de GitHub.


Conclusión

La gestión de múltiples repositorios Git puede ser compleja cuando se realizan cambios estructurales en cuentas o proyectos. Este script en Bash ofrece una solución práctica, segura e interactiva para automatizar la actualización de remotos sin perder control sobre el proceso.

Gracias al modo interactivo y al soporte de simulación, se convierte en una herramienta ideal tanto para desarrolladores individuales como para entornos con múltiples proyectos distribuidos.

En resumen, se trata de una pequeña herramienta de automatización que puede ahorrar horas de trabajo repetitivo y reducir errores humanos en tareas críticas de mantenimiento. El código de este pequeño proyecto se puede consultar y descargar en el repositorio de GitHub en el que alojé el proyecto.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.