# 🚀 Guía Completa: Crear un Nuevo Proyecto desde CD-System

## 📋 Ejemplo: Crear el proyecto "pedroweb"

Esta guía te muestra paso a paso cómo crear un nuevo proyecto basado en CD-System, usando como ejemplo el proyecto **"pedroweb"**.

---

## 🎯 Objetivo

Crear un nuevo repositorio con la rama `cd-system` clonada desde el repositorio central, configurado correctamente con protección de archivos del sistema.

---

## 📋 Requisitos Previos

- [ ] Acceso al repositorio `LACOMPANIADIGITAL/cd-system` en GitHub
- [ ] Permisos para crear repositorios en la organización `LACOMPANIADIGITAL`
- [ ] Git configurado en tu máquina
- [ ] Acceso al directorio de trabajo (ej: `/Applications/XAMPP/xamppfiles/htdocs/`)

---

## 🔄 Proceso Completo

### Paso 1: Crear el Repositorio en GitHub

1. Ve a GitHub y crea un nuevo repositorio:
   - **Nombre**: `pedroweb` (o el nombre de tu proyecto)
   - **Visibilidad**: Privado o Público (según corresponda)
   - **Inicialización**: Puede estar vacío o con README (no importa, lo sobrescribiremos)

2. **Copia la URL del repositorio**:
   ```
   https://github.com/LACOMPANIADIGITAL/pedroweb.git
   ```

---

### Paso 2: Preparar el Directorio Local

```bash
# 1. Ir al directorio padre donde quieres crear el proyecto
cd /Applications/XAMPP/xamppfiles/htdocs

# 2. Crear el directorio del proyecto
mkdir pedroweb
cd pedroweb

# 3. Inicializar repositorio Git
git init

# 4. Configurar el remote origin
git remote add origin https://github.com/LACOMPANIADIGITAL/pedroweb.git
```

---

### Paso 3: Clonar CD-System usando el Script

```bash
# 1. Copiar el script desde cd-system
cp ../cd-system/scripts/clone-to-new-repo.sh .
chmod +x clone-to-new-repo.sh

# 2. Ejecutar el script (desde el directorio pedroweb)
./clone-to-new-repo.sh https://github.com/LACOMPANIADIGITAL/pedroweb.git
```

#### ¿Qué hace el script?

El script automáticamente:
- ✅ Descarga la rama `cd-system` desde el repositorio central
- ✅ Crea la rama local `cd-system` con todo el código
- ✅ Configura los remotes correctamente
- ✅ Verifica que `.gitattributes` esté presente
- ✅ Valida archivos críticos del sistema

#### Si el script detecta problemas:

- **Si `.gitattributes` no tiene protecciones**: El script te avisará. Deberás copiarlo manualmente:
  ```bash
  cp ../cd-system/.gitattributes .
  git add .gitattributes
  git commit -m "chore: Agregar protección de archivos del sistema"
  ```

---

### Paso 4: Verificar el Estado

```bash
# Verificar que estás en la rama cd-system
git branch

# Verificar remotes
git remote -v

# Verificar que .gitattributes tenga protecciones
grep "merge=ours" .gitattributes
```

**Deberías ver:**
- Rama `cd-system` activa
- Remote `origin` apuntando a `pedroweb`
- `.gitattributes` con líneas que contienen `merge=ours`

---

### Paso 5: Push Inicial al Repositorio

```bash
# Subir la rama cd-system al repositorio remoto
git push -u origin cd-system
```

Esto subirá toda la rama `cd-system` con todo el historial de commits al repositorio `pedroweb`.

---

### Paso 6: Verificar en GitHub

1. Ve a `https://github.com/LACOMPANIADIGITAL/pedroweb`
2. Verifica que:
   - ✅ Existe la rama `cd-system`
   - ✅ Tiene todos los archivos del sistema
   - ✅ El commit más reciente está presente

---

## ✅ Checklist de Verificación

Después de completar el proceso, verifica que tengas:

- [ ] Repositorio creado en GitHub
- [ ] Rama `cd-system` clonada localmente
- [ ] Remote `origin` configurado correctamente
- [ ] `.gitattributes` presente con protecciones (`merge=ours`)
- [ ] Archivos críticos presentes:
  - [ ] `config/cd-system.php`
  - [ ] `config/site.php`
  - [ ] `public/cd-project/assets/logo.png`
- [ ] Push realizado a GitHub
- [ ] Rama visible en GitHub

---

## 🔒 Protección de Archivos

Una vez configurado, los siguientes archivos **NO serán sobrescritos** durante merges futuros:

- `config/cd-system.php` - Configuración base del sistema
- `config/site.php` - Configuración del sitio
- `public/cd-project/assets/*` - Assets de identidad del proyecto

Esto se logra gracias a `.gitattributes` con la estrategia `merge=ours`.

---

## 📝 Próximos Pasos

Una vez completado el clonado:

1. **Configurar el proyecto**:
   ```bash
   composer install
   cp .env.example .env
   php artisan key:generate
   ```

2. **Personalizar la identidad**:
   - Editar `config/site.php` con información del proyecto
   - Reemplazar assets en `public/cd-project/assets/`
   - Configurar demos en `config/demos/`

3. **Configurar base de datos**:
   - Editar `.env` con credenciales
   - Ejecutar migraciones: `php artisan migrate`

---

## 🆘 Solución de Problemas

### Error: "La rama cd-system ya existe"

Si el script detecta que la rama ya existe:
- El script te preguntará si deseas sobrescribirla
- Responde `y` para continuar
- El script cambiará automáticamente a otra rama antes de eliminar

### Error: ".gitattributes no tiene protecciones"

Si el script detecta que `.gitattributes` no tiene `merge=ours`:
```bash
# Copiar desde cd-system
cp ../cd-system/.gitattributes .
git add .gitattributes
git commit -m "chore: Agregar protección de archivos del sistema"
```

### Error: "No se puede hacer push"

Verifica:
- Que tengas permisos en el repositorio
- Que el remote `origin` esté correctamente configurado
- Que tengas conexión a internet

---

## 📚 Referencias

- [Protección de Archivos del Sistema](./proteccion-archivos-sistema.md)
- [Propagación de Mejoras del Core](./propagacion-mejoras-core.md)
- [Paso 2: Setup del Proyecto](./2-setup-nuevo-proyecto.md)

---

## 💡 Notas Importantes

1. **El script debe ejecutarse desde el directorio del nuevo proyecto**, no desde cd-system
2. **El repositorio puede estar vacío o con contenido**, el script lo manejará
3. **La rama siempre se llama `cd-system`**, esto es intencional para mantener consistencia
4. **Los archivos protegidos mantendrán la identidad del proyecto** durante futuros merges

---

## 🎉 ¡Listo!

Una vez completado este proceso, tendrás:
- ✅ Un nuevo repositorio con CD-System completo
- ✅ Protección automática de archivos del sistema
- ✅ Listo para personalizar y desarrollar
```

¿Quieres que actualice algún paso o agregue más detalles? También puedo crear un script de resumen que automatice estos pasos.
