# 🔄 Actualizar Proyecto mediante Git Pull

## 🎯 Objetivo

Este documento explica cómo actualizar un proyecto (como terashe) que es una copia exacta de cd-system mediante un simple `git pull`, respetando las protecciones de `.gitattributes`.

---

## ✅ Validación Pre-Pull

### 1. Verificar que `.gitattributes` está Configurado

```bash
# En el servidor, conectarse al proyecto terashe
cd /ruta/a/terashe  # o donde esté el proyecto en el servidor

# Verificar protecciones
cat .gitattributes | grep "merge=ours"

# Debe mostrar:
# config/cd-system.php merge=ours
# config/site.php merge=ours
# public/cd-project/assets/* merge=ours
```

**✅ Validación:**
- [ ] `.gitattributes` existe
- [ ] Tiene al menos 2 protecciones (config files)
- [ ] Assets están protegidos

### 2. Verificar Estado Actual

```bash
# Ver estado del repositorio
git status

# Ver en qué rama estamos
git branch

# Debe estar en la rama cd-system
```

---

## 🚀 Proceso de Actualización con Git Pull

### Paso 1: Verificar Cambios Disponibles

```bash
# Obtener información del remoto (sin aplicar cambios)
git fetch origin cd-system

# Ver qué commits hay disponibles
git log HEAD..origin/cd-system --oneline

# Ver qué archivos se actualizarán
git diff HEAD..origin/cd-system --name-only | grep "demo-architecture-2"
```

**Archivos que se actualizarán:**
- ✅ `resources/views/layout/front/footers/demo-architecture-2.blade.php`
- ✅ `public/template/css/demos/demo-architecture-2.css`
- ✅ `resources/views/modules/*/frontend/partials/dynamic-header.blade.php`
- ✅ `resources/views/modules/gallery/frontend/index.blade.php`
- ✅ `resources/views/modules/cd-base/frontend/demos/demo-architecture-2/*.blade.php`

**Archivos que NO se actualizarán (protegidos):**
- ❌ `config/cd-system.php` - Mantiene configuración del proyecto
- ❌ `config/site.php` - Mantiene identidad del proyecto
- ❌ `public/cd-project/assets/*` - Mantiene assets del proyecto

### Paso 2: Hacer Backup (Recomendado)

```bash
# Crear backup de archivos críticos (opcional pero recomendado)
mkdir -p storage/app/backups/pre-pull-$(date +%Y%m%d)
cp config/cd-system.php storage/app/backups/pre-pull-$(date +%Y%m%d)/ 2>/dev/null || true
cp config/site.php storage/app/backups/pre-pull-$(date +%Y%m%d)/ 2>/dev/null || true
```

### Paso 3: Ejecutar Git Pull

```bash
# Hacer pull de la rama cd-system
git pull origin cd-system

# O simplemente (si la rama está configurada para trackear origin/cd-system)
git pull
```

**¿Qué hace `git pull`?**
1. Ejecuta `git fetch` para obtener cambios del remoto
2. Ejecuta `git merge` para integrar los cambios
3. Las protecciones de `.gitattributes` funcionan automáticamente durante el merge

### Paso 4: Verificar que las Protecciones Funcionaron

```bash
# Verificar que config/cd-system.php mantiene la configuración del proyecto
cat config/cd-system.php | grep "demo"
# Debe mostrar el demo del PROYECTO (terashe), NO el de cd-system

# Verificar que config/site.php mantiene la identidad del proyecto
cat config/site.php | grep -A 2 "'name'"
# Debe mostrar el nombre del PROYECTO (terashe)

# Verificar que los assets no cambiaron
git status public/cd-project/assets/
# No debe mostrar cambios
```

**✅ Validación:**
- [ ] `config/cd-system.php` mantiene configuración del proyecto
- [ ] `config/site.php` mantiene identidad del proyecto
- [ ] Assets del proyecto no cambiaron
- [ ] Archivos del demo se actualizaron correctamente

### Paso 5: Limpiar Cache de Laravel

```bash
# Limpiar todos los caches
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear

# Si usas opcache, reiniciar PHP-FPM o el servidor web
```

### Paso 6: Verificar Funcionalidad

```bash
# Verificar que el proyecto funciona
# Abrir en navegador y verificar:
# - Footer optimizado se muestra correctamente
# - Headers tienen color consistente (#847266)
# - Gallery no muestra título/descripción en hover
# - Logo del proyecto se mantiene
# - Configuraciones del proyecto se mantienen
```

---

## 🔍 Cómo Funcionan las Protecciones

### Git Attributes con `merge=ours`

Cuando Git encuentra un archivo con `merge=ours` en `.gitattributes` durante un merge:

1. **Automáticamente mantiene la versión local** (del proyecto)
2. **Ignora la versión remota** (de cd-system)
3. **No genera conflictos** - La decisión es automática

### Ejemplo Práctico

```bash
# Antes del pull
cat config/cd-system.php | grep "demo"
# Output: 'demo' => 'demo-architecture-2',  # Configuración de terashe

# Después del pull (cd-system tiene 'demo' => 'demo-accounting-2')
cat config/cd-system.php | grep "demo"
# Output: 'demo' => 'demo-architecture-2',  # SIGUE siendo la de terashe ✅
```

---

## ⚠️ Manejo de Conflictos

### Archivos Protegidos NO Deberían Tener Conflictos

Gracias a `merge=ours`, los archivos protegidos automáticamente mantienen la versión del proyecto.

Si hay conflictos en archivos protegidos, significa que `.gitattributes` no está configurado correctamente.

### Archivos que Pueden Tener Conflictos

- `composer.json` - Si hay dependencias diferentes
- Vistas genéricas - Si hay personalizaciones específicas del proyecto
- Helpers - Si hay modificaciones específicas del proyecto

### Resolver Conflictos

```bash
# Ver archivos en conflicto
git status

# Resolver manualmente cada conflicto
# Luego:
git add <archivo-resuelto>
git commit
```

---

## 📋 Checklist Completo

### Antes del Pull:

- [ ] `.gitattributes` verificado y correcto
- [ ] Backup realizado (opcional pero recomendado)
- [ ] Cambios revisados con `git fetch` y `git diff`
- [ ] Proyecto en la rama correcta (`cd-system`)

### Durante el Pull:

- [ ] `git pull origin cd-system` ejecutado
- [ ] Sin errores durante el pull
- [ ] Sin conflictos en archivos protegidos

### Después del Pull:

- [ ] `config/cd-system.php` mantiene configuración del proyecto
- [ ] `config/site.php` mantiene identidad del proyecto
- [ ] Assets del proyecto no cambiaron
- [ ] Archivos del demo se actualizaron correctamente
- [ ] Cache de Laravel limpiado
- [ ] Proyecto funciona correctamente
- [ ] Cambios probados en navegador

---

## 🚀 Comando Rápido (Todo en Uno)

```bash
# Desde el directorio del proyecto en el servidor
cd /ruta/a/terashe

# 1. Verificar protecciones
cat .gitattributes | grep "merge=ours" || echo "⚠️ ADVERTENCIA: Protecciones no encontradas"

# 2. Ver cambios disponibles
git fetch origin cd-system
git log HEAD..origin/cd-system --oneline

# 3. Hacer pull
git pull origin cd-system

# 4. Verificar protecciones funcionaron
cat config/cd-system.php | grep "demo"
cat config/site.php | grep -A 2 "'name'"

# 5. Limpiar cache
php artisan config:clear && php artisan cache:clear && php artisan view:clear

# 6. Verificar estado final
git status
```

---

## 🧪 Prueba de Validación

### Antes del Pull:

```bash
# Guardar configuración actual
OLD_DEMO=$(grep -A 1 "'demo'" config/cd-system.php | grep "=>" | head -1)
OLD_NAME=$(grep -A 1 "'name'" config/site.php | grep "=>" | head -1)

echo "Configuración actual:"
echo "Demo: $OLD_DEMO"
echo "Nombre: $OLD_NAME"
```

### Después del Pull:

```bash
# Verificar que se mantuvo
NEW_DEMO=$(grep -A 1 "'demo'" config/cd-system.php | grep "=>" | head -1)
NEW_NAME=$(grep -A 1 "'name'" config/site.php | grep "=>" | head -1)

echo "Configuración después del pull:"
echo "Demo: $NEW_DEMO"
echo "Nombre: $NEW_NAME"

# Deben ser iguales
if [ "$OLD_DEMO" = "$NEW_DEMO" ] && [ "$OLD_NAME" = "$NEW_NAME" ]; then
    echo "✅ Protecciones funcionaron correctamente"
else
    echo "❌ ERROR: Las protecciones no funcionaron"
fi
```

---

## 📚 Documentación Relacionada

- `ACTUALIZAR-DEMOS-DESDE-CD-SYSTEM.md` - Guía completa con upstream
- `VALIDACION-ACTUALIZACION-DEMOS.md` - Checklist de validación
- `PROCESO-COMMIT-Y-ACTUALIZACION.md` - Proceso completo

---

## ✅ Reglas de Oro

1. **Siempre verificar `.gitattributes`** antes de hacer pull
2. **Hacer backup** antes de pull (opcional pero recomendado)
3. **Revisar cambios con `git fetch` y `git diff`** antes de aplicar
4. **Los archivos protegidos NO deberían cambiar** - Si cambian, revisar `.gitattributes`
5. **Limpiar cache después del pull** - Siempre ejecutar `php artisan config:clear`

---

**Última actualización:** Diciembre 2024  
**Versión:** 1.0 - Guía para Git Pull

