# Estructura Git del Workspace ## Repositorio Principal - **URL Remota:** https://github.com/rckrdmrd/workspace.git - **Branch principal:** `main` ## Arquitectura de Repositorios Este workspace implementa una arquitectura de repositorios multinivel que permite: 1. **Repositorio maestro** - Contiene todo el workspace (este repositorio) 2. **Repositorios por proyecto** - Cada proyecto puede tener su propio repositorio independiente 3. **Repositorios por subproyecto** - Verticales o componentes específicos pueden tener repositorios propios ``` workspace/ # Repo: rckrdmrd/workspace.git ├── core/ # Incluido en workspace ├── projects/ │ ├── erp-suite/ # Puede tener repo independiente │ │ └── apps/ │ │ └── verticales/ │ │ └── construccion/ # Puede tener repo independiente │ ├── gamilit/ # Puede tener repo independiente │ └── trading-platform/ # Puede tener repo independiente ├── customers/ # Incluido en workspace ├── knowledge-base/ │ └── reference/ │ └── odoo/odoo-18.0/ # SUBMODULE: github.com/odoo/odoo.git └── devtools/ # Incluido en workspace ``` ## Submodules (Referencias Externas) El workspace utiliza git submodules para referencias externas que tienen su propio repositorio. ### Submodules Incluidos | Submodule | URL | Descripción | |-----------|-----|-------------| | `knowledge-base/reference/odoo/odoo-18.0` | https://github.com/odoo/odoo.git | Código fuente de Odoo (referencia ERP) | ### Comandos de Submodules ```bash # Clonar workspace CON submodules (recomendado) git clone --recurse-submodules https://github.com/rckrdmrd/workspace.git # Si ya clonaste sin submodules, inicialízalos git submodule update --init --recursive # Clone superficial (más rápido, menos espacio) git submodule update --init --depth 1 # Actualizar submodules a última versión git submodule update --remote --merge # Ver estado de submodules git submodule status ``` ### Agregar Nuevos Submodules Para agregar un nuevo repositorio externo como referencia: ```bash # Ejemplo: agregar un nuevo repo en reference git submodule add --depth 1 https://github.com/user/repo.git knowledge-base/reference/nombre-repo # Ejemplo: agregar en catalog git submodule add --depth 1 https://github.com/user/repo.git core/catalog/nombre-modulo ``` ### Política de Submodules Los submodules se usan para: - Código de referencia externo (`knowledge-base/reference/`) - Módulos del catálogo que vienen de repos externos (`core/catalog/`) **Importante:** Los submodules mantienen su propio historial git y se sincronizan con el repo original. ## Estrategia de Gitignore ### Nivel Workspace (/.gitignore) El archivo maestro `.gitignore` en la raíz excluye: | Categoría | Exclusiones | |-----------|-------------| | **Dependencias** | `**/node_modules/`, `**/.venv/`, `**/venv/` | | **Build** | `**/dist/`, `**/build/`, `**/.next/`, `**/.turbo/` | | **Testing** | `**/coverage/`, `**/.pytest_cache/` | | **Secrets** | `**/.env*`, `**/credentials.json`, `**/*.pem` | | **Database** | `**/*.dump`, `**/*.backup`, `**/pgdata/` | | **IDE** | `**/.idea/`, `**/.vscode/*` (excepto settings compartidos) | | **OS** | `**/.DS_Store`, `**/Thumbs.db` | | **Logs** | `**/*.log`, `**/logs/` | | **i18n/Traducciones** | `**/i18n/*.po`, `**/i18n/*.pot` (archivos de traducción pesados) | | **Fuentes** | `**/*.woff`, `**/*.ttf`, `**/*.eot` (fuentes tipográficas) | ### Nivel Proyecto Cada proyecto puede tener su propio `.gitignore` para exclusiones específicas. Templates disponibles en `/devtools/templates/gitignore/`: - `.gitignore.project.template` - Template general para proyectos - `.gitignore.backend.template` - Template para apps backend - `.gitignore.frontend.template` - Template para apps frontend - `.gitignore.database.template` - Template para carpetas database ## Configurar Repositorio Independiente por Proyecto ### Opción 1: Git Subtree (Recomendado) Permite mantener proyectos como parte del workspace principal pero con repositorios independientes. ```bash # En el proyecto que quieres independizar cd /home/isem/workspace/projects/gamilit # Agregar como subtree desde el workspace git subtree add --prefix=projects/gamilit git@github.com:user/gamilit.git main --squash # Push cambios al repo independiente git subtree push --prefix=projects/gamilit git@github.com:user/gamilit.git main # Pull cambios del repo independiente git subtree pull --prefix=projects/gamilit git@github.com:user/gamilit.git main --squash ``` ### Opción 2: Git Submodule Para proyectos que deben ser completamente independientes. ```bash # Desde el workspace raíz git submodule add git@github.com:user/gamilit.git projects/gamilit # Clonar workspace con submodules git clone --recurse-submodules git@github.com:rckrdmrd/workspace.git # Actualizar submodules git submodule update --remote --merge ``` ### Opción 3: Repositorios Separados con Links Simbólicos Para desarrollo local con repos completamente separados. ```bash # Estructura real fuera del workspace ~/repos/gamilit/ # Repo independiente # Link simbólico en el workspace ln -s ~/repos/gamilit /home/isem/workspace/projects/gamilit ``` **Nota:** Los links simbólicos NO se versionan en git por defecto. ## Estructura de Niveles ``` workspace/ # NIVEL 0 - Workspace ├── projects/ │ ├── [plataforma]/ # NIVEL 1 - Plataforma (ej: erp-suite) │ │ ├── apps/ │ │ │ ├── [subplataforma]/ # NIVEL 2 - Subplataforma (ej: verticales) │ │ │ │ └── [proyecto]/ # NIVEL 3 - Proyecto (ej: construccion) │ │ │ │ ├── backend/ # NIVEL 4 - Componente │ │ │ │ ├── frontend/ # NIVEL 4 - Componente │ │ │ │ └── database/ # NIVEL 4 - Componente ``` ### Repositorios por Nivel | Nivel | Ejemplo | Puede tener repo independiente | |-------|---------|-------------------------------| | 0 | workspace | Sí (este repositorio) | | 1 | erp-suite, gamilit | Sí | | 2 | verticales, saas | Opcional | | 3 | construccion, clinicas | Sí | | 4 | backend, frontend | Raramente necesario | ## Flujo de Trabajo Recomendado ### Desarrollo Normal (Solo workspace) ```bash # Trabajar normalmente git add . git commit -m "feat: descripción del cambio" git push origin main ``` ### Con Repositorios por Proyecto (Subtree) ```bash # 1. Commit en workspace git add . git commit -m "feat: cambios en gamilit" git push origin main # 2. Sincronizar con repo del proyecto git subtree push --prefix=projects/gamilit git@github.com:user/gamilit.git main ``` ### Clonar Workspace Completo ```bash # Clone básico git clone https://github.com/rckrdmrd/workspace.git # Si usa submodules git clone --recurse-submodules https://github.com/rckrdmrd/workspace.git ``` ## Archivos y Carpetas que SÍ se Versionan - Código fuente (TypeScript, JavaScript, Python, etc.) - Documentación (`/docs`, `/orchestration`, `/core`) - Configuraciones compartidas (`.vscode/settings.json`, `tsconfig.json`) - Scripts de desarrollo (`/devtools/scripts`) - Templates y patrones (`/core/catalog`, `/devtools/templates`) - DDL y migrations (`/database/ddl`, `/database/migrations`) - Seeds de ejemplo (`/database/seeds` - solo datos de ejemplo) - Archivos de configuración ejemplo (`.env.example`) ## Archivos que NUNCA se Versionan - Dependencias (`node_modules/`, `venv/`) - Archivos compilados (`dist/`, `build/`) - Datos sensibles (`.env`, `credentials.json`) - Datos de clientes - Backups de base de datos - Logs - Archivos grandes de referencia (`knowledge-base/reference/odoo/`) ## Comandos Útiles ```bash # Ver estado del repositorio git status # Ver archivos ignorados git status --ignored # Ver qué archivos serían trackeados git ls-files # Verificar tamaño del repositorio git count-objects -vH # Ver estructura de remotos git remote -v # Listar branches git branch -a ``` ## Migración del Workspace Para migrar el workspace a otra máquina: ```bash # 1. Clonar repositorio git clone https://github.com/rckrdmrd/workspace.git cd workspace # 2. (Opcional) Si usa submodules git submodule update --init --recursive # 3. Instalar dependencias por proyecto cd projects/gamilit && npm install cd ../trading-platform && npm install # etc. ``` ## Contacto y Mantenimiento El repositorio principal es mantenido en: - **GitHub:** https://github.com/rckrdmrd/workspace.git