# 🔒 .gitattributes Optimizado para Proyectos

## 🎯 Objetivo

Este documento explica el archivo `.gitattributes` optimizado que protege todos los archivos específicos del proyecto durante actualizaciones desde cd-system.

---

## 📋 Archivos Protegidos

### 1. Configuración del Proyecto

```
config/cd-system.php merge=ours
config/site.php merge=ours
```

**¿Por qué?**
- `config/cd-system.php` - Contiene el demo activo, módulos activos, y configuración específica del proyecto
- `config/site.php` - Contiene la identidad del proyecto (nombre, email, textos, SEO, etc.)

### 2. Logos del Proyecto

```
public/cd-project/img/logos/** merge=ours
public/cd-project/img/logos/* merge=ours
```

**¿Por qué?**
- Los logos son específicos de cada proyecto
- Incluye: `logo.png`, `logo-2.png`, `logo-alternative.png`

### 3. Favicons del Proyecto

```
public/cd-project/img/favicon/** merge=ours
public/cd-project/img/favicon/* merge=ours
```

**¿Por qué?**
- Los favicons son específicos de cada proyecto
- Incluye: `favicon.ico`, `favicon.svg`, `apple-touch-icon.png`, `web-app-manifest-*.png`, `site.webmanifest`

### 4. Assets Temporales/Backup

```
public/cd-project/assets/** merge=ours
public/cd-project/assets/* merge=ours
```

**¿Por qué?**
- Carpeta temporal para assets durante actualizaciones
- Puede contener backups o archivos intermedios del proyecto

### 5. Skins CSS Personalizados (Opcional)

```
# Si tu proyecto tiene un skin personalizado, descomenta y ajusta:
# public/template/css/skins/skin-mi-proyecto.css merge=ours
```

**¿Por qué?**
- Los skins del demo (skin-architecture-2.css, etc.) NO deben protegerse
- Solo los skins personalizados del proyecto deben protegerse
- Si no tienes skin personalizado, no necesitas esta línea

---

## 📝 Archivo Completo

```gitattributes
# Auto detect text files and perform LF normalization
* text=auto

# ============================================
# Archivos protegidos del proyecto
# Estos archivos mantienen la identidad del proyecto y NO deben ser sobrescritos
# durante merges o pulls desde cd-system. Se usa estrategia "ours" para mantener
# siempre la versión del proyecto.
# ============================================

# Configuración del proyecto
config/cd-system.php merge=ours
config/site.php merge=ours

# Logos del proyecto
public/cd-project/img/logos/** merge=ours
public/cd-project/img/logos/* merge=ours

# Favicons del proyecto
public/cd-project/img/favicon/** merge=ours
public/cd-project/img/favicon/* merge=ours

# Assets temporales/backup del proyecto
public/cd-project/assets/** merge=ours
public/cd-project/assets/* merge=ours

# Skins CSS personalizados del proyecto (si existen)
# NOTA: Los skins del demo (skin-architecture-2.css, skin-law-firm-2.css, etc.)
# NO deben protegerse, solo los personalizados del proyecto
# Si tu proyecto tiene un skin personalizado, descomenta y ajusta la línea:
# public/template/css/skins/skin-mi-proyecto.css merge=ours
```

---

## ✅ Validación

### Verificar que está Configurado Correctamente

```bash
# En el proyecto
cat .gitattributes | grep "merge=ours" | wc -l
# Debe mostrar al menos 6 (config files + logos + favicons + assets)
```

### Probar las Protecciones

```bash
# Antes del pull, guardar configuración
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)

# Hacer pull
git pull origin cd-system

# 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)

# 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
```

---

## 🚀 Uso en el Servidor

### Para Terashe (o cualquier proyecto)

1. **Copiar el archivo al servidor:**
   ```bash
   # En el servidor, conectarse al proyecto
   cd /ruta/a/terashe
   
   # Copiar .gitattributes (puedes usar scp, rsync, o editar directamente)
   # El contenido está arriba en "Archivo Completo"
   ```

2. **Verificar que se copió correctamente:**
   ```bash
   cat .gitattributes | grep "merge=ours"
   ```

3. **Hacer commit del .gitattributes (opcional pero recomendado):**
   ```bash
   git add .gitattributes
   git commit -m "chore: Agregar protecciones .gitattributes para actualizaciones"
   ```

4. **Hacer pull:**
   ```bash
   git pull origin cd-system
   ```

---

## ⚠️ Notas Importantes

### Skins CSS

- **NO protejas los skins del demo** - Estos deben actualizarse desde cd-system
- **Solo protege skins personalizados** - Si tu proyecto tiene un skin único
- **Ejemplo:** Si tu proyecto tiene `skin-terashe.css`, entonces agrega:
  ```
  public/template/css/skins/skin-terashe.css merge=ours
  ```

### Assets del Demo

- Los assets del demo (`public/cd-project/img/demos/**`) **NO deben protegerse**
- Estos son parte del core y deben actualizarse desde cd-system
- Solo los assets del proyecto (`logos/`, `favicon/`, `assets/`) están protegidos

---

## 📚 Documentación Relacionada

- `ACTUALIZAR-MEDIANTE-GIT-PULL.md` - Cómo hacer pull con protecciones
- `ACTUALIZAR-DEMOS-DESDE-CD-SYSTEM.md` - Guía completa de actualización
- `VALIDACION-ACTUALIZACION-DEMOS.md` - Checklist de validación

---

**Última actualización:** Diciembre 2024  
**Versión:** 1.0 - .gitattributes Optimizado

