Migración de GitLab a GitHub
Relevamiento hecho el 2026-09-22 sobre ~/Proyectos de la MacBook Pro, con comandos
de sólo lectura. No se migró ningún repo todavía: la clave SSH de la Pro no está
aceptada en GitHub (ver Bloqueantes).
Estado de la autenticación
| Servicio | Resultado |
|---|---|
GitLab (ssh -T git@gitlab.com) | ✅ Welcome to GitLab, @gabriel205! |
GitHub (ssh -T git@github.com) | ❌ Permission denied (publickey) |
gh (CLI de GitHub) | ❌ no está instalado en la Pro |
| Token de GitHub guardado | ❌ no hay (~/.config/gh no existe, sin credential helper) |
La clave que hay que cargar en GitHub es ~/.ssh/id_ed25519.pub de la Pro:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEjda7pJgenqWVZ53LC3k4O1233JYBM6ouT+EL5si6Yb gabriel@macbook-pro
Se reintentó tres veces durante el trabajo y siguió dando Permission denied.
Sin eso no se puede empujar nada. Lo único que hoy funciona contra GitHub es
HTTPS y sólo para repos públicos.
Inventario de repos
| Repo | Remoto actual | Rama | Commits | Sin comitear | Sin pushear | Tamaño (.git) | Último commit |
|---|---|---|---|---|---|---|---|
| baileys-mcp | GitHub juanbusso/baileys-mcp (público) | feat/agentapi-cli-shim | 67 | 1 archivo | 49 commits (rama sin remoto) | 246M (2.7M) | 2026-09-22 |
| plant-cerebro | GitLab vivet-group/interno | main | 13 | — | — | 1.2M (640K) | 2026-09-22 |
| plant-direccion | GitLab vivet-group/direccion | main | 2 | — | — | 760K (360K) | 2026-09-04 |
| plant-finanzas | GitLab vivet-group/interno | main | 2 | 4 archivos | — | 300K (152K) | 2026-09-05 |
| plant-hub | GitLab vivet-group/plant-hub | feat/meli-buyer-comparison | 1642 | — | 18 commits | 2.8G (39M) | 2026-09-21 |
| plant-interno | GitLab vivet-group/interno | main | 352 | — | 5 ramas wt/ sin remoto (0 commits propios) | 103M (68M) | 2026-09-22 |
| plant-operativo | GitLab vivet-group/interno | main | 1 | 3 archivos | — | 188K (136K) | 2026-09-06 |
| plant-personal | GitLab gabriel205 | main | 3 | 2 archivos | — | 444K (264K) | 2026-09-07 |
| plant-rrhh | GitLab vivet-group/interno | main | 1 | 3 archivos | — | 188K (136K) | 2026-09-06 |
| plant-skills | GitLab vivet-group/skills | main | 6 | — | — | 15M (4.6M) | 2026-09-11 |
| plant-vicenzo | GitLab gabriel205 | main | 100 | — | — | 5.1M (1.9M) | 2026-09-22 |
| mcp-google-workspace | no es repo git | — | — | — | — | — | — |
| mcp-mercadolibre | no es repo git | — | — | — | — | — | — |
Ningún repo tiene submódulos. Ningún repo tiene blobs de más de 20 MB en el
historial, así que el límite de 100 MB por archivo de GitHub no es un problema.
Qué hay en GitHub hoy
Sin gh ni token sólo se pueden ver repos públicos. Se probaron los 11 nombres
contra los dueños juanbusso, gabriel205, gabrielbusso y vivet-group:
juanbusso/baileys-mcpexiste y es público. Sumainestá en
106ed571. El origin/main que tiene cacheada la Pro es 601fc0bd y el main
local es 442beea0: la copia local está desactualizada y GitHub ya avanzó más
todavía.
- Todos los demás dieron "no accesible": pueden existir como privados o no existir.
No se puede distinguir una cosa de la otra sin autenticarse. Hay que
confirmarlo con Juanchi o entrando a GitHub.
Bloqueantes de seguridad — NO migrar estos repos como están
1. plant-hub · apps/shop/shop.env.local — clave privada viva en main
El archivo está presente en el HEAD de main (y en origin/main de GitLab,
y en origin/feat/product-sheet-and-filters y origin/fix/catalogo-orden-y-sidebar-sticky).
Son 73 líneas con credenciales reales, entre ellas:
FIREBASE_PRIVATE_KEY— una clave RSA completa-----BEGIN PRIVATE KEY-----,
no un placeholder (línea 19).
LEGACY_MONGO_URIyDATABASE_URL.ENCRYPTION_KEY,COOKIE_SECRET_CURRENT,COOKIE_SECRET_PREVIOUS,CRON_SECRET.FIREBASE_API_KEY,NEXT_PUBLIC_GOOGLE_MAPS_API_KEY,QA_LOGIN_CODE.
Entró el 2026-08-06 en el commit 728b93a7 ("Feat: Add editorial dark chrome for
catalog aisles"). El 2026-08-19 el commit bf5354f2 ("seguridad: sacar del repo un
archivo de entorno con credenciales de Mongo") lo borró y arregló el .gitignore
— pero ese arreglo nunca se mergeó a main. Sólo está en staging y en
feat/meli-buyer-comparison.
git merge-base --is-ancestor bf5354f2 main → NOEs decir: main, que es la rama por defecto, sigue teniendo el archivo. Y aunque
se borre hoy, queda en el historial, así que empujar main a GitHub publica
igual la clave en cualquiera que pueda clonar.
2. plant-hub · token de Home Assistant hardcodeado
packages/business-logic/src/actions/admin/infrastructure/ha-client.ts, línea 8:
un token JWT de larga duración de Home Assistant como DEFAULT_HA_TOKEN, junto a
DEFAULT_HA_URL = "http://100.78.179.114:8123" (IP de Tailscale). El token vence
recién en 2036. Está en staging y en feat/meli-buyer-comparison (commit 7b89f2f4).
3. baileys-mcp está en un repo PÚBLICO y la rama sin pushear tiene datos personales
juanbusso/baileys-mcp es público. Los 49 commits sin pushear de
feat/agentapi-cli-shim incluyen, en texto plano:
- El número de WhatsApp de Gabriel,
5491154829979, en
src/baileys/client.ts (líneas 420 y 1608) y en src/db/database.ts (línea 300).
- Otro número,
5491123971760, ensrc/baileys/client.tslínea 1611. - JIDs de grupos privados con su nombre en
scripts/cleanup-corrupted-sessions.js
(líneas 31-33): "Hogar", "THGAS GENERAL", "Baileys mcp".
- JIDs por defecto en
src/config/env.ts(líneas 25-26).
No hay credenciales de sesión de WhatsApp versionadas — eso está bien. Pero
empujar esa rama a un repo público publica el número personal de Gabriel y los
identificadores de sus grupos.
4. mcp-google-workspace tiene una clave de service account suelta
~/Proyectos/mcp-google-workspace/service_account.json (2.395 bytes, permisos
-rw-------). Hoy no es riesgo porque la carpeta no es un repo git. Pasa a
serlo el día que alguien haga git init ahí. Si se va a versionar ese proyecto,
primero .gitignore.
Qué está limpio
Se escaneó el historial completo (git log -p --all) de los diez repos
candidatos buscando valores reales de credenciales: tokens de GitHub/GitLab,
sk-ant-, sk-proj-, claves de Slack, AWS, Google API, bloques
BEGIN ... PRIVATE KEY, y URIs de Mongo/Postgres/Redis con contraseña.
Sin hallazgos en: baileys-mcp, plant-cerebro, plant-direccion, plant-finanzas,
plant-interno, plant-operativo, plant-personal, plant-rrhh, plant-skills, plant-vicenzo.
Las apariciones de client_secret en plant-interno (scripts y workers) y en
plant-hub son todas lecturas de variables de entorno (env.GOOGLE_CLIENT_SECRET,
cfg["client_secret"]), no valores. Los -----BEGIN PRIVATE KEY----- de los tests
de facturación de plant-hub son literales de prueba ("\nx\n", "MIIBkey").
La sk-ant-api03-clave-super-secreta-de-prueba de ai-config.test.ts es falsa.
Las AIza... de Firebase en google-services.json, GoogleService-Info.plist y
firebase-messaging-sw.js son claves de cliente, pensadas para ir en el navegador.
Riesgos que no son de seguridad
- 49 commits de baileys-mcp que hoy no existen en ningún remoto. La rama
feat/agentapi-cli-shim nunca se empujó. Si se rompe el disco de la Pro, se
pierden. Es el trabajo de los últimos días sobre el asistente. Es el riesgo más
urgente después de los secretos.
- 18 commits de plant-hub en
feat/meli-buyer-comparisonsin empujar, pero
esos sí están en GitLab en su rama remota — el riesgo es menor.
- Tres
maindistintos en baileys-mcp (local442beea0, caché601fc0bd,
GitHub 106ed571). Antes de tocar nada hay que hacer git fetch y decidir.
Nunca con --force.
- Cinco ramas
wt/en plant-interno sin remoto, pero con cero commits
propios: son worktrees, no hay nada que perder.
- Cambios sin comitear en plant-finanzas (
.gitignoremodificado, más
CLAUDE.md, DREAMS.md y memory/ sin agregar), plant-operativo, plant-rrhh
(.gitignore, DREAMS.md, memory/dreaming/) y plant-personal (.claude/,
CLAUDE.md). No se comitearon: decide Gabriel qué va al repo y qué no.
- plant-hub pesa 2.8G en disco aunque el
.gitsean 39M: el resto es
node_modules y artefactos. El clon a GitHub es liviano.
Plan de migración
Paso 0 — desbloquear (hace falta Gabriel o Juanchi)
- Cargar la clave
id_ed25519.pubde la Pro en GitHub (Settings → SSH keys).
Verificar con ssh -T git@github.com.
- Confirmar con Juanchi qué repos ya creó en GitHub, con qué nombre y bajo qué
dueño u organización. Sin eso no se sabe si hay que crear o si ya existen.
- Si no se va a instalar
gh, los repos hay que crearlos a mano en GitHub,
vacíos y privados, con estos nombres: plant-cerebro, plant-direccion,
plant-finanzas, plant-interno, plant-operativo, plant-personal,
plant-rrhh, plant-skills, plant-vicenzo. Y plant-hub recién después de
resolver los secretos.
Paso 1 — migrar los nueve repos limpios
Para cada uno, una vez creado el repo vacío del otro lado:
git remote add github git@github.com:<dueño>/<repo>.git
git push github --all
git push github --tags
git ls-remote github # comparar hashes contra los locales
El remoto origin de GitLab no se toca: queda de respaldo.
Paso 2 — baileys-mcp
Decidir antes si el repo sigue público. Si sigue público, sacar el número de
teléfono y los JIDs de grupos a variables de entorno antes de empujar
feat/agentapi-cli-shim. Si pasa a privado, se puede empujar directo.
Paso 3 — plant-hub
No migrar hasta que se decida qué hacer con la clave de Firebase y el token de
Home Assistant. Hay dos caminos y los dos necesitan que Gabriel decida:
- Rotar las credenciales (clave de Firebase, usuarios de Mongo, token de HA,
ENCRYPTION_KEY, CRON_SECRET) y migrar aceptando que el historial viejo
queda con secretos ya muertos. Es lo más sano y no requiere reescribir nada.
- Limpiar el historial con
git filter-repoo BFG. Reescribe historia, rompe
los clones de todo el equipo y no lo hago sin una orden explícita.
En cualquier caso, mergear bf5354f2 a main para que la rama por defecto
deje de tener el archivo.
Lo que no se hizo y por qué
- No se migró ningún repo: GitHub rechaza la clave SSH de la Pro.
- No se creó ningún repo en GitHub: no hay
ghni token en la Pro. - No se comiteó nada de los cambios sueltos: decide Gabriel.
- No se borró nada en GitLab ni se sacó ningún remoto
origin. - No se hizo ningún push forzado ni se reescribió historia.
🔗 Conexiones Neuronales
- Eje: vivet-web|Vívet · Rediseño Web & Marca
- Eje: elevar-conciencia
- Eje: elevar-conciencia|Elevar Conciencia · Dirección Estratégica
- Eje: asistente-gaby
Proyectos/migracion-gitlab-a-github