@draweb/gw
v1.0.2
Published
Git Workspace CLI - manage multiple git identities and SSH keys per workspace
Downloads
178
Readme
gw – Git Workspace CLI

Creador: draweb.cloud
gw es una interfaz de línea de comandos que se comporta como git, pero añade workspaces: perfiles con nombre, email de commit y clave SSH propia. Así puedes trabajar en el mismo ordenador con varias identidades (cliente, empresa personal, cuenta secundaria, open source, etc.) sin estar cambiando a mano git config global ni confundir qué clave usa cada repositorio.
El problema que resuelve
Si tienes más de un contexto en Git (dos cuentas de GitHub/GitLab, trabajo y personal, varios clientes…), suele pasar esto:
| Situación | Dolor habitual |
|-----------|----------------|
| Varios usuarios en el mismo PC | git config user.name / user.email global solo admite una identidad; los commits salen con el autor equivocado. |
| Varias claves SSH | Sin reglas claras en ~/.ssh/config, SSH elige la clave incorrecta y falla el push o accedes con la cuenta que no toca. |
| Cambiar de repo | Tienes que acordarte de reconfigurar el repo o exportar GIT_SSH_COMMAND… fácil de olvidar y poco reproducible. |
| Clonar con la identidad correcta | Clonas con HTTPS o una URL genérica y luego arreglas a mano remotes y credenciales. |
gw automatiza eso: cada workspace guarda quién eres en git y qué clave SSH usar; al clonar o enlazar un repo, gw escribe la configuración local del repositorio y crea alias SSH del tipo miempresa.github.com que apuntan al host real con la clave adecuada.
La solución en una frase
Un workspace = una identidad git + una clave SSH. Los repos que creas o enlazas con
-w <workspace>quedan configurados para usar solo esa identidad y esa clave, sin tocar tu configuración global de git.
Qué obtienes con gw
- Identidades aisladas:
user.nameyuser.emailpor repositorio cuando usas clone/init/repo link con workspace. - SSH predecible: entradas en
~/.ssh/config(Host <workspace>.<servidor>) para que cada URL use la clave del workspace correcto. - Menos comandos repetidos:
gw push,gw pullygw fetchpueden usar el workspace y los remotes ya marcados en.git/config(sin repetiroriginsi no quieres). - Compatibilidad con git: cualquier comando que no sea propio de gw se ejecuta como
git …. Puedes sustituirgitporgwen el día a día y seguir usandogw status,gw commit,gw log, etc. - Varios remotes / mirrors: puedes asociar remotes a un workspace y usar
--all-remotesen push/fetch cuando lo necesites.
Para quién es
- Desarrolladores con cuenta personal y de trabajo (o varios clientes) en el mismo equipo.
- Equipos que quieren documentar y repetir cómo se configura la identidad por proyecto sin scripts ad hoc.
- Quien ya usa SSH con git y quiere dejar de pelear con
IdentityFiley commits con el autor incorrecto.
Requisitos
- Node.js >= 18
- git instalado y en PATH
- OpenSSH (ssh-keygen) para generar claves
Instalación
El paquete en npm es @draweb/gw (scope @draweb). El ejecutable global sigue llamándose gw.
npm install -g @draweb/gwComprueba la instalación:
gw --version
gw --helpEjecutar sin instalar globalmente (usa la última versión publicada al vuelo):
npx @draweb/gw --helpDesarrollo (desde el repositorio clonado)
cd git_workspace
npm install
npm linkTras npm link, el comando gw apunta al código local del repo.
Si npm install -g @draweb/gw responde 404, la versión aún no está publicada en el registro: publica con npm publish desde este repo (cuenta npm con acceso al scope @draweb y 2FA/token según política de npm).
Uso básico
1. Crear un workspace
gw workspace add drawebTe pedirá nombre y email para git, y si usar una clave SSH existente o generar una nueva (estándar GitHub: Ed25519).
Modo no interactivo (scripts):
gw workspace add draweb --name "Tu Nombre" --email [email protected] --new-key
# o con clave existente:
gw workspace add draweb --name "Tu Nombre" --email [email protected] --identity-file ~/.ssh/id_ed25519_draweb2. Clonar con un workspace
gw clone -w draweb [email protected]:usuario/repo.gitgw crea un alias SSH (draweb.github.com) en ~/.ssh/config con la clave del workspace, clona el repo y configura user.name y user.email en el repo, y guarda el workspace asociado en .git/config para push/pull simplificados.
Argumentos extra de git clone se pasan igual:
gw clone -w draweb [email protected]:usuario/repo.git mi-carpeta --depth 13. Listar y gestionar workspaces
gw workspace list
gw workspace show draweb
gw workspace remove draweb
gw workspace remove draweb --clean-ssh # y quitar hosts de ~/.ssh/config
gw workspace current # dentro de un repo: workspace asociado
gw workspace edit draweb --email [email protected]
# Imprimir la clave pública en consola (para pegar en GitHub/GitLab):
gw workspace pubkey draweb
# En Windows, copiar al portapapeles:
gw workspace pubkey draweb | clip4. Remotes con workspace (mirrors)
Añadir un remote con identidad de un workspace:
gw remote add origin -w draweb [email protected]:usuario/repo.git
gw remote set-url origin -w draweb [email protected]:usuario/repo.gitListar remotes mostrando el workspace:
gw remote -v
# o
gw remote list5. Push, pull y fetch simplificados
Dentro de un repo que tiene [gw] workspace y remotes con gwWorkspace:
gw push– push al remote del workspace actual (p. ej. origin)gw pull– pull desde el remote del workspace actualgw fetch– fetch desde los remotes del workspace actualgw push --all-remotes– push a todos los remotes con workspace (mirrors)gw fetch --all-remotes– fetch de todos
Si indicas el remote explícitamente (gw push origin), se reenvía a git sin cambiar el comportamiento.
6. Init y asociar repo existente
gw init -w draweb
# o en un repo ya clonado (con origin SSH):
gw repo link -w draweb7. Diagnóstico
gw doctorComprueba que las claves de los workspaces existan y que ~/.ssh/config sea escribible.
Passthrough a git
Cualquier comando que no sea los anteriores se ejecuta con git:
gw status
gw commit -m "mensaje"
gw branch -a
gw log --onelinePara la ayuda de un comando de git: gw commit --help muestra la ayuda de git commit.
Ayuda en consola
gw -h/gw --help— visión general del CLI.gw workspace --help— subcomandos de workspace (add,list,show,pubkey,current,edit,remove, …).
Configuración
- Config de gw:
~/.gw/config.json(Windows:%USERPROFILE%\.gw\config.json). Contiene la lista de workspaces (name, email, identityFile). - SSH: gw escribe en
~/.ssh/configbloquesHost <workspace>.<host>para usar la clave correcta por workspace. - Repo: en
.git/configse guarda[gw] workspace = <nombre>y en cada remotegwWorkspace = <nombre>cuando usas gw para clonar o añadir remotes.
Códigos de salida
0– éxito1– error de uso (argumentos, validación)2– error de entorno (config corrupta, git no encontrado)3– error en operación externa (ssh-keygen, git clone, etc.)
Documentación técnica
Especificación técnica completa (arquitectura, APIs, formatos de config, flujos y códigos de salida): docs/ESPECIFICACION_TECNICA.md.
Licencia
MIT
