Sistema NEXUS v3.4 migrado con: Estructura principal: - core/orchestration: Sistema SIMCO + CAPVED (27 directivas, 28 perfiles) - core/catalog: Catalogo de funcionalidades reutilizables - shared/knowledge-base: Base de conocimiento compartida - devtools/scripts: Herramientas de desarrollo - control-plane/registries: Control de servicios y CI/CD - orchestration/: Configuracion de orquestacion de agentes Proyectos incluidos (11): - gamilit (submodule -> GitHub) - trading-platform (OrbiquanTIA) - erp-suite con 5 verticales: - erp-core, construccion, vidrio-templado - mecanicas-diesel, retail, clinicas - betting-analytics - inmobiliaria-analytics - platform_marketing_content - pos-micro, erp-basico Configuracion: - .gitignore completo para Node.js/Python/Docker - gamilit como submodule (git@github.com:rckrdmrd/gamilit-workspace.git) - Sistema de puertos estandarizado (3005-3199) Generated with NEXUS v3.4 Migration System EPIC-010: Configuracion Git y Repositorios
407 lines
9.7 KiB
Markdown
407 lines
9.7 KiB
Markdown
# SIMCO: GIT (Control de Versiones)
|
|
|
|
**Version:** 1.0.0
|
|
**Fecha:** 2025-12-12
|
|
**Aplica a:** TODO agente que modifica codigo
|
|
**Prioridad:** OBLIGATORIA
|
|
|
|
---
|
|
|
|
## RESUMEN EJECUTIVO
|
|
|
|
> **Todo cambio en codigo DEBE versionarse correctamente.**
|
|
> **Commits frecuentes, atomicos y descriptivos.**
|
|
> **Nunca perder trabajo por falta de commits.**
|
|
|
|
---
|
|
|
|
## PRINCIPIOS FUNDAMENTALES
|
|
|
|
```
|
|
╔══════════════════════════════════════════════════════════════════════╗
|
|
║ ║
|
|
║ "Commitear temprano, commitear frecuentemente" ║
|
|
║ ║
|
|
║ Cada commit debe: ║
|
|
║ - Representar un cambio logico completo ║
|
|
║ - Ser funcional (no romper compilacion) ║
|
|
║ - Ser reversible sin afectar otros cambios ║
|
|
║ - Tener mensaje descriptivo con ID de tarea ║
|
|
║ ║
|
|
╚══════════════════════════════════════════════════════════════════════╝
|
|
```
|
|
|
|
---
|
|
|
|
## FRECUENCIA DE COMMITS
|
|
|
|
```yaml
|
|
OBLIGATORIO_commitear:
|
|
- Al finalizar cada fase (Analisis, Planeacion, Ejecucion)
|
|
- Al completar cada archivo significativo
|
|
- Cada 30-45 minutos de trabajo continuo
|
|
- Antes de lanzar subagentes
|
|
- Despues de validar trabajo de subagentes
|
|
- Antes de cambiar de tarea
|
|
- Cuando build + lint pasan
|
|
|
|
RAZON: "Minimizar perdida de trabajo en caso de error"
|
|
```
|
|
|
|
---
|
|
|
|
## FORMATO DE MENSAJE DE COMMIT
|
|
|
|
### Estructura Obligatoria
|
|
|
|
```
|
|
[{TAREA-ID}] {tipo}: {descripcion concisa}
|
|
|
|
{cuerpo opcional - descripcion detallada}
|
|
|
|
{footer opcional - referencias, breaking changes}
|
|
```
|
|
|
|
### Ejemplos Correctos
|
|
|
|
```bash
|
|
# Feature nueva
|
|
[DB-042] feat: Crear tabla projects con soporte PostGIS
|
|
|
|
# Bug fix
|
|
[BE-015] fix: Corregir validacion de codigo unico en ProjectService
|
|
|
|
# Refactor
|
|
[FE-008] refactor: Extraer componente ProjectCard de ProjectList
|
|
|
|
# Documentacion
|
|
[DB-042] docs: Actualizar DATABASE_INVENTORY con tabla projects
|
|
|
|
# Tests
|
|
[BE-015] test: Agregar tests unitarios para ProjectService
|
|
|
|
# Subtarea
|
|
[DB-042-SUB-001] feat: Implementar indices para tabla projects
|
|
```
|
|
|
|
### Ejemplos Incorrectos
|
|
|
|
```bash
|
|
# Sin ID de tarea
|
|
fix: Corregir bug
|
|
|
|
# Muy vago
|
|
[BE-015] update: Cambios varios
|
|
|
|
# Demasiado largo en primera linea
|
|
[DB-042] feat: Crear tabla projects con todas las columnas necesarias incluyendo soporte para PostGIS y configuracion de indices compuestos para optimizar queries
|
|
|
|
# Sin tipo
|
|
[FE-008] Mejorar componente
|
|
```
|
|
|
|
---
|
|
|
|
## TIPOS DE COMMITS
|
|
|
|
| Tipo | Uso | Ejemplo |
|
|
|------|-----|---------|
|
|
| `feat` | Nueva funcionalidad | `[DB-042] feat: Agregar soporte PostGIS` |
|
|
| `fix` | Correccion de bug | `[BE-015] fix: Resolver error en constraint` |
|
|
| `refactor` | Refactorizacion sin cambio funcional | `[FE-008] refactor: Mejorar estructura componentes` |
|
|
| `docs` | Solo documentacion | `[DB-042] docs: Actualizar README con schema` |
|
|
| `test` | Agregar/modificar tests | `[BE-015] test: Agregar tests para ProjectService` |
|
|
| `chore` | Tareas de mantenimiento | `[DB-042] chore: Actualizar dependencias` |
|
|
| `style` | Formato/estilo (sin cambio logico) | `[FE-008] style: Aplicar prettier` |
|
|
| `perf` | Mejora de performance | `[DB-042] perf: Agregar indice compuesto` |
|
|
| `build` | Cambios en build/deps | `[BE-015] build: Actualizar TypeORM a v0.3` |
|
|
| `ci` | Cambios en CI/CD | `[INFRA-001] ci: Agregar workflow de tests` |
|
|
|
|
---
|
|
|
|
## COMMITS ATOMICOS
|
|
|
|
### Que es un Commit Atomico
|
|
|
|
```yaml
|
|
atomico:
|
|
- Representa UN cambio logico completo
|
|
- Es funcional (build pasa)
|
|
- Es reversible individualmente
|
|
- No mezcla cambios no relacionados
|
|
|
|
NO_atomico:
|
|
- Multiples cambios no relacionados
|
|
- Trabajo incompleto (excepto WIP explicito)
|
|
- Mezcla de fix y feat
|
|
- Cambios en multiples features
|
|
```
|
|
|
|
### Ejemplo de Atomicidad
|
|
|
|
```bash
|
|
# CORRECTO - Commits atomicos separados
|
|
[DB-042] feat: Crear tabla projects
|
|
[DB-042] feat: Agregar indices a tabla projects
|
|
[DB-042] feat: Crear seeds para projects
|
|
[DB-042] docs: Actualizar inventario con tabla projects
|
|
|
|
# INCORRECTO - Un commit masivo
|
|
[DB-042] feat: Crear tabla projects con indices, seeds y actualizacion de inventario
|
|
```
|
|
|
|
---
|
|
|
|
## FLUJO DE TRABAJO GIT
|
|
|
|
### Antes de Empezar Tarea
|
|
|
|
```bash
|
|
# 1. Asegurar rama actualizada
|
|
git fetch origin
|
|
git pull origin main
|
|
|
|
# 2. Crear rama de trabajo (si aplica)
|
|
git checkout -b feature/{TAREA-ID}-descripcion-corta
|
|
|
|
# 3. Verificar estado limpio
|
|
git status
|
|
```
|
|
|
|
### Durante la Tarea
|
|
|
|
```bash
|
|
# 1. Hacer cambios
|
|
# ... editar archivos ...
|
|
|
|
# 2. Verificar que build pasa
|
|
npm run build
|
|
npm run lint
|
|
|
|
# 3. Agregar cambios
|
|
git add {archivos especificos}
|
|
# o para todos los cambios relacionados:
|
|
git add .
|
|
|
|
# 4. Commit con mensaje descriptivo
|
|
git commit -m "[TAREA-ID] tipo: descripcion"
|
|
|
|
# 5. Repetir para cada cambio logico
|
|
```
|
|
|
|
### Al Completar Tarea
|
|
|
|
```bash
|
|
# 1. Verificar historial
|
|
git log --oneline -5
|
|
|
|
# 2. Push a remoto
|
|
git push origin {rama}
|
|
|
|
# 3. Crear PR si aplica
|
|
gh pr create --title "[TAREA-ID] Descripcion" --body "..."
|
|
```
|
|
|
|
---
|
|
|
|
## CHECKLIST PRE-COMMIT
|
|
|
|
```yaml
|
|
ANTES_de_cada_commit:
|
|
- [ ] Build pasa sin errores
|
|
- [ ] Lint pasa sin errores criticos
|
|
- [ ] Tests pasan (si existen)
|
|
- [ ] Cambios son logicamente completos
|
|
- [ ] No hay archivos no deseados (node_modules, .env, etc.)
|
|
- [ ] Mensaje sigue formato correcto
|
|
|
|
VERIFICAR:
|
|
git status # Ver archivos modificados
|
|
git diff # Ver cambios en detalle
|
|
git diff --cached # Ver cambios staged
|
|
```
|
|
|
|
---
|
|
|
|
## ERRORES COMUNES
|
|
|
|
| Error | Consecuencia | Solucion |
|
|
|-------|--------------|----------|
|
|
| No commitear frecuentemente | Perdida de trabajo | Commit cada 30-45 min |
|
|
| Commits masivos | Dificil revertir | Commits atomicos |
|
|
| Mensajes vagos | Historial incomprensible | Seguir formato |
|
|
| Commit con build roto | Bloquea CI/CD | Verificar antes de commit |
|
|
| Olvidar ID de tarea | Perdida de trazabilidad | Siempre incluir [TAREA-ID] |
|
|
| Commitear secretos | Brecha de seguridad | Verificar .gitignore |
|
|
|
|
---
|
|
|
|
## ARCHIVOS A IGNORAR (.gitignore)
|
|
|
|
```yaml
|
|
SIEMPRE_ignorar:
|
|
- node_modules/
|
|
- .env
|
|
- .env.*
|
|
- dist/
|
|
- build/
|
|
- coverage/
|
|
- *.log
|
|
- .DS_Store
|
|
- *.tmp
|
|
- *.cache
|
|
|
|
NUNCA_commitear:
|
|
- Credenciales
|
|
- API keys
|
|
- Passwords
|
|
- Certificados privados
|
|
- Archivos de configuracion local
|
|
```
|
|
|
|
---
|
|
|
|
## RAMAS (BRANCHING)
|
|
|
|
### Convencion de Nombres
|
|
|
|
```yaml
|
|
ramas:
|
|
feature: feature/{TAREA-ID}-descripcion-corta
|
|
bugfix: bugfix/{TAREA-ID}-descripcion-corta
|
|
hotfix: hotfix/{TAREA-ID}-descripcion-corta
|
|
release: release/v{X.Y.Z}
|
|
|
|
ejemplos:
|
|
- feature/DB-042-crear-tabla-projects
|
|
- bugfix/BE-015-fix-validacion
|
|
- hotfix/SEC-001-fix-xss
|
|
- release/v2.1.0
|
|
```
|
|
|
|
### Flujo de Ramas
|
|
|
|
```
|
|
main (produccion)
|
|
│
|
|
├─── develop (desarrollo)
|
|
│ │
|
|
│ ├─── feature/DB-042-*
|
|
│ │ └── merge a develop
|
|
│ │
|
|
│ ├─── feature/BE-015-*
|
|
│ │ └── merge a develop
|
|
│ │
|
|
│ └── release/v2.1.0
|
|
│ └── merge a main + tag
|
|
│
|
|
└─── hotfix/SEC-001-*
|
|
└── merge a main + develop
|
|
```
|
|
|
|
---
|
|
|
|
## REVERTIR CAMBIOS
|
|
|
|
### Revertir Ultimo Commit (no pusheado)
|
|
|
|
```bash
|
|
# Mantener cambios en working directory
|
|
git reset --soft HEAD~1
|
|
|
|
# Descartar cambios completamente
|
|
git reset --hard HEAD~1
|
|
```
|
|
|
|
### Revertir Commit ya Pusheado
|
|
|
|
```bash
|
|
# Crear commit de reversion (seguro)
|
|
git revert {commit-hash}
|
|
git push
|
|
```
|
|
|
|
### Deshacer Cambios en Archivo
|
|
|
|
```bash
|
|
# Descartar cambios no staged
|
|
git checkout -- {archivo}
|
|
|
|
# Descartar cambios staged
|
|
git reset HEAD {archivo}
|
|
git checkout -- {archivo}
|
|
```
|
|
|
|
---
|
|
|
|
## SITUACIONES ESPECIALES
|
|
|
|
### Work in Progress (WIP)
|
|
|
|
```bash
|
|
# Cuando necesitas commitear trabajo incompleto
|
|
git commit -m "[TAREA-ID] WIP: descripcion de estado actual"
|
|
|
|
# Luego, completar y hacer commit final
|
|
# (opcional: squash commits WIP antes de PR)
|
|
```
|
|
|
|
### Antes de Lanzar Subagente
|
|
|
|
```bash
|
|
# SIEMPRE commitear antes de delegar
|
|
git add .
|
|
git commit -m "[TAREA-ID] chore: Estado antes de delegacion a {SubAgente}"
|
|
```
|
|
|
|
### Despues de Validar Subagente
|
|
|
|
```bash
|
|
# Commitear resultado de subagente
|
|
git add .
|
|
git commit -m "[TAREA-ID-SUB-XXX] tipo: Resultado de {SubAgente}"
|
|
```
|
|
|
|
---
|
|
|
|
## VALIDACION DE COMMITS
|
|
|
|
### Verificar Historial
|
|
|
|
```bash
|
|
# Ver ultimos commits
|
|
git log --oneline -10
|
|
|
|
# Ver commits de tarea especifica
|
|
git log --oneline --grep="DB-042"
|
|
|
|
# Ver cambios de un commit
|
|
git show {commit-hash}
|
|
```
|
|
|
|
### Verificar Formato de Mensaje
|
|
|
|
```yaml
|
|
formato_valido:
|
|
- Tiene [TAREA-ID] al inicio
|
|
- Tiene tipo valido (feat, fix, etc.)
|
|
- Descripcion concisa (<72 caracteres primera linea)
|
|
- No tiene errores de ortografia graves
|
|
|
|
verificar_manualmente:
|
|
git log --oneline -1
|
|
# Debe mostrar: {hash} [TAREA-ID] tipo: descripcion
|
|
```
|
|
|
|
---
|
|
|
|
## REFERENCIAS
|
|
|
|
- **Principio de Validacion:** @PRINCIPIOS/PRINCIPIO-VALIDACION-OBLIGATORIA.md
|
|
- **Documentar:** @SIMCO/SIMCO-DOCUMENTAR.md
|
|
- **Crear:** @SIMCO/SIMCO-CREAR.md
|
|
|
|
---
|
|
|
|
**Version:** 1.0.0 | **Sistema:** SIMCO | **Mantenido por:** Tech Lead
|