clase:daw:daw-proyecto:tema03
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| clase:daw:daw-proyecto:tema03 [2026/10/13 19:39] – creado Lorenzo | clase:daw:daw-proyecto:tema03 [2026/10/14 14:08] (actual) – Tema nuevo «2. IA y agentes»: los temas 2 a 7 pasan a ser 3 a 8, con sus referencias cruzadas renumeradas claude | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== 3. Docker en el proyecto ====== | + | ====== 3. Git en el proyecto ====== |
| + | |||
| + | Objetivo del tema: que nadie vuelva a escribir a mano un comando de git del día a día. Al acabar, todo lo de git pasa por la skill ''/ | ||
| + | |||
| + | Lo que ya sabéis y aquí no se repite: | ||
| + | |||
| + | * Git básico, '' | ||
| + | * Ramas, los tipos de merge, conflictos y, sobre todo, **worktrees** y por qué uno por rama cuando se trabaja con agentes: [[clase: | ||
| + | * Scrum y los tableros de GitHub: [[clase: | ||
| + | |||
| + | ===== Git en Windows ===== | ||
| + | |||
| + | En Linux y Mac, git viene con bash. En Windows, el instalador de Git ([[https:// | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Elegir **«Use Git and optional Unix tools from the Command Prompt»**: git y los comandos de Linux quedan disponibles desde cualquier terminal (Git Bash, '' | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Elegir **«Only ever fast-forward»**. En este módulo nunca se hace '' | ||
| + | |||
| + | ===== GitHub CLI: gh ===== | ||
| + | |||
| + | '' | ||
| + | |||
| + | * **Windows**: | ||
| + | * **Linux (Ubuntu, Debian, Mint)**: '' | ||
| + | * **Mac**: '' | ||
| + | |||
| + | Después, iniciar sesión una vez, eligiendo // | ||
| + | |||
| + | <sxh bash> | ||
| + | gh auth login | ||
| + | gh auth status | ||
| + | </ | ||
| + | |||
| + | Con eso '' | ||
| + | |||
| + | ===== El repositorio y el agente ===== | ||
| + | |||
| + | Antes de la primera skill hay que dejar el repositorio del tema 1 preparado para trabajar con el agente: su estructura, sus dos ramas, las instrucciones que lee el agente al empezar y los permisos que tiene. | ||
| + | |||
| + | ==== El repositorio del proyecto ==== | ||
| + | |||
| + | Un único repositorio en GitHub, creado desde cero por cada alumno, con el backend y el frontend dentro: | ||
| + | |||
| + | < | ||
| + | mi-proyecto/ | ||
| + | ├── backend/ | ||
| + | ├── frontend/ | ||
| + | ├── compose.yaml | ||
| + | ├── compose.override.yaml | ||
| + | ├── app.sh | ||
| + | ├── .kiro/ | ||
| + | ├── docs/ <- detalle para el agente, si hace falta | ||
| + | ├── AGENTS.md | ||
| + | ├── CLAUDE.md | ||
| + | ├── .claude/ | ||
| + | │ | ||
| + | │ | ||
| + | └── .github/ | ||
| + | </ | ||
| + | |||
| + | La estructura interna de '' | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | === Las dos ramas === | ||
| + | |||
| + | El proyecto tiene solo dos ramas oficiales: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Se crean las dos en el primer commit y se cambia la rama por defecto en GitHub (//Settings → General → Default branch//) o con '' | ||
| + | |||
| + | <sxh bash> | ||
| + | git switch -c develop | ||
| + | git push -u origin develop | ||
| + | gh repo edit --default-branch develop | ||
| + | </ | ||
| + | |||
| + | ==== Instrucciones para el agente: AGENTS.md ==== | ||
| + | |||
| + | '' | ||
| + | |||
| + | <sxh plain; | ||
| + | @AGENTS.md | ||
| + | </ | ||
| + | |||
| + | Así los dos agentes leen exactamente lo mismo y solo hay un fichero que mantener. | ||
| + | |||
| + | Lo que va dentro, y nada más: | ||
| + | |||
| + | * **Qué es el proyecto**, en dos líneas. | ||
| + | * **Cómo se compila, arranca y prueba**: los comandos exactos. En el tema 4 se añade dónde corren Maven y Playwright. | ||
| + | * **Reglas del proyecto** que el agente tiene que respetar siempre: las ramas, que git se maneja con ''/ | ||
| + | |||
| + | <note tip> | ||
| + | |||
| + | ==== Skills en este proyecto ==== | ||
| + | |||
| + | Qué es una skill y cómo se escribe está en el [[.: | ||
| + | |||
| + | * **Dónde van**: en '' | ||
| + | * **Dos tipos**. Las **de tarea** se invocan escribiendo ''/ | ||
| + | * **Un subcomando por llamada**: todas las skills de tarea del proyecto reciben familia, sustantivo y verbo, como en el tema 1 (''/ | ||
| + | * **'' | ||
| + | |||
| + | <sxh yaml> | ||
| + | --- | ||
| + | name: estado | ||
| + | description: | ||
| + | allowed-tools: | ||
| + | --- | ||
| + | </ | ||
| + | |||
| + | '' | ||
| + | |||
| + | ==== Permisos del agente: lo básico ==== | ||
| + | |||
| + | El agente pide permiso antes de ejecutar comandos o escribir ficheros. Aceptar uno a uno no es sostenible, y aceptar todo a ciegas tampoco. Lo justo para trabajar: | ||
| + | |||
| + | * **Claude Code**: ''/ | ||
| + | |||
| + | <sxh json; | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ], | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | * **OpenCode**: | ||
| + | |||
| + | En el tema 5 se completa la lista con lo que haga falta para programar. | ||
| + | |||
| + | |||
| + | ===== Issues y tablero ===== | ||
| + | |||
| + | Todo trabajo empieza por un **issue**. El issue es la unidad: de él sale la rama, su número va en los commits y al fusionar se cierra solo. | ||
| + | |||
| + | El tablero es un **GitHub Project** del repositorio con tres columnas: //Todo//, //In progress// y //Done//. De sus automatizaciones (// | ||
| + | |||
| + | Etiquetas: '' | ||
| + | |||
| + | Los issues se crean desde la web o con '' | ||
| + | |||
| + | <sxh bash> | ||
| + | gh issue create --title "Alta de clientes" | ||
| + | gh issue list | ||
| + | gh issue view 12 | ||
| + | </ | ||
| + | |||
| + | ===== Las ramas de este proyecto ===== | ||
| + | |||
| + | El modelo de ramas de Despliegue 2 tiene '' | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Y por cada issue, una **rama de trabajo** en su propio worktree: | ||
| + | |||
| + | ^ Cosa ^ Nombre ^ Ejemplo ^ | ||
| + | | Rama | ''< | ||
| + | | Worktree | '' | ||
| + | |||
| + | El número del issue en el nombre de la rama hace que la skill sepa siempre a qué issue pertenece, sin preguntarlo. | ||
| + | |||
| + | **Sin pull requests.** En un proyecto individual nadie va a revisar el PR, así que es un trámite que no aporta nada: la rama se fusiona en '' | ||
| + | |||
| + | ===== El ciclo de una rama ===== | ||
| + | |||
| + | - **Iniciar**: | ||
| + | - **Trabajar** en el worktree. Commits pequeños con '' | ||
| + | - **Actualizar**: | ||
| + | - **Finalizar**: | ||
| + | - **Publicar**: | ||
| + | |||
| + | Por qué '' | ||
| + | |||
| + | ==== El commit que cierra el issue ==== | ||
| + | |||
| + | GitHub cierra un issue automáticamente cuando llega a la **rama por defecto** un commit cuyo mensaje contiene '' | ||
| + | |||
| + | < | ||
| + | feat(#12): Alta de clientes | ||
| + | |||
| + | Closes #12 | ||
| + | </ | ||
| + | |||
| + | Al hacer push de '' | ||
| + | |||
| + | ===== Reglas para que la IA toque git ===== | ||
| + | |||
| + | Una skill que ejecuta git puede hacer daño si improvisa. Estas reglas van en la skill y no se negocian: | ||
| + | |||
| + | * **Nunca '' | ||
| + | * **Nunca '' | ||
| + | * **Nunca resolver un conflicto**. Si un merge da conflicto, la skill **se para**, enseña '' | ||
| + | * **La carpeta principal siempre en '' | ||
| + | * **Una operación por invocación**: | ||
| + | * **'' | ||
| + | |||
| + | ===== La skill /git-flow ===== | ||
| + | |||
| + | Se parte de la skill que ya enlaza Despliegue 2, {{ : | ||
| + | |||
| + | * Quitar '' | ||
| + | |||
| + | ^ Operación ^ Qué hace ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | * El nombre del alumno para las ramas se lee de '' | ||
| + | * Añadir '' | ||
| + | * '' | ||
| + | |||
| + | En el tema 4 '' | ||
| + | |||
| + | < | ||
| + | |||
| + | ===== Ejercicios ===== | ||
| + | Todos los ejercicios se hacen en el repositorio del tema 1. Desde el ejercicio 5, ningún comando de git se escribe a mano. | ||
| + | |||
| + | ==== Ejercicio 1 ==== | ||
| + | * Instala '' | ||
| + | * Escribe '' | ||
| + | * Crea '' | ||
| + | * Abre una conversación nueva en Claude Code y otra en OpenCode y pregunta al agente cómo se arranca el backend. Tiene que responder con lo que has escrito. | ||
| + | |||
| + | ==== Ejercicio 2 ==== | ||
| + | * Crea la rama '' | ||
| + | * Ponla como rama por defecto en GitHub con '' | ||
| + | * Comprueba en la web del repositorio que al entrar se ve '' | ||
| + | |||
| + | ==== Ejercicio 3 ==== | ||
| + | * Escribe la skill ''/ | ||
| + | * Pon en '' | ||
| + | * Pruébala en Claude Code y en OpenCode. | ||
| + | * Crea '' | ||
| + | * Haz commit de todo y push a '' | ||
| + | |||
| + | ==== Ejercicio 4 ==== | ||
| + | * Crea el tablero del repositorio (GitHub Project) con las columnas //Todo//, //In progress// y //Done//. | ||
| + | * Comprueba en los // | ||
| + | * Crea las etiquetas '' | ||
| + | * Crea con '' | ||
| + | |||
| + | ==== Ejercicio 5 ==== | ||
| + | * Descarga {{ : | ||
| + | * Pide al agente que la adapte a este proyecto: quitar '' | ||
| + | * Pide que añada la operación '' | ||
| + | * Añade a '' | ||
| + | * Lee la skill entera y comprueba que '' | ||
| + | |||
| + | ==== Ejercicio 6 ==== | ||
| + | * ''/ | ||
| + | * Pasa los dos issues a //In progress// en el tablero. | ||
| + | * En el primer worktree pide al agente la página de inicio; en el segundo, el README. | ||
| + | * En cada worktree, ''/ | ||
| + | * ''/ | ||
| + | * ''/ | ||
| + | |||
| + | ==== Ejercicio 7 ==== | ||
| + | * ''/ | ||
| + | * Con la carpeta principal en '' | ||
clase/daw/daw-proyecto/tema03.1791913162.txt.gz · Última modificación: por Lorenzo
