workspace/GIT-STRUCTURE.md
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- Configure workspace Git repository with comprehensive .gitignore
- Add Odoo as submodule for ERP reference code
- Include documentation: SETUP.md, GIT-STRUCTURE.md
- Add gitignore templates for projects (backend, frontend, database)
- Structure supports independent repos per project/subproject level

Workspace includes:
- core/ - Reusable patterns, modules, orchestration system
- projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.)
- knowledge-base/ - Reference code and patterns (includes Odoo submodule)
- devtools/ - Development tools and templates
- customers/ - Client implementations template

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 10:44:23 -06:00

283 lines
8.5 KiB
Markdown

# 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