- 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>
283 lines
8.5 KiB
Markdown
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
|