clase:daw:daw:1eval:tema02
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| clase:daw:daw:1eval:tema02 [2025/11/03 11:37] – creado - editor externo 127.0.0.1 | clase:daw:daw:1eval:tema02 [2026/10/08 08:19] (actual) – [Ejercicios] Lorenzo | ||
|---|---|---|---|
| Línea 10: | Línea 10: | ||
| {{: | {{: | ||
| + | ===== Worktrees ===== | ||
| + | Normalmente un repositorio de Git tiene **una sola carpeta de trabajo** y en ella solo puede haber una rama activa a la vez. Si estamos en la rama '' | ||
| + | |||
| + | Un **worktree** (árbol de trabajo) es **otra carpeta de trabajo del mismo repositorio**. Cada worktree tiene su propia rama activa y sus propios ficheros, pero todos comparten el mismo repositorio ('' | ||
| + | |||
| + | Por eso, a partir de ahora el flujo de trabajo cambia: **cada vez que se crea una rama de feature, se crea también un worktree para esa feature**. Así: | ||
| + | * La carpeta principal del repositorio se queda **siempre** en la rama '' | ||
| + | * Cada feature vive en su propia carpeta, **hermana** de la principal, llamada ''< | ||
| + | * Al acabar la feature, se borra su worktree y su rama. | ||
| + | |||
| + | Por ejemplo, si el repositorio está en ''/ | ||
| + | |||
| + | / | ||
| + | ├── mi-proyecto | ||
| + | ├── mi-proyecto-wt-lorenzo_45 | ||
| + | └── mi-proyecto-wt-lorenzo_46 | ||
| + | |||
| + | **¿Por qué usar worktrees? | ||
| + | |||
| + | Las órdenes básicas de worktrees son: | ||
| + | |||
| + | <sxh bash> | ||
| + | # Crear la rama lorenzo_45 desde develop y su worktree en una carpeta hermana | ||
| + | git worktree add -b lorenzo_45 ../ | ||
| + | |||
| + | # Ver los worktrees que hay (la primera línea es la carpeta principal) | ||
| + | git worktree list | ||
| + | |||
| + | # Borrar el worktree (la carpeta) de la rama lorenzo_45 | ||
| + | git worktree remove ../ | ||
| + | </ | ||
| + | |||
| + | <note important> | ||
| + | * Una rama solo puede estar activa en **un** worktree a la vez. Por eso desde el worktree de una feature no se puede hacer '' | ||
| + | * No se puede borrar una rama que tiene un worktree. Primero hay que borrar el worktree con '' | ||
| + | * '' | ||
| + | * No borréis la carpeta de un worktree a mano con '' | ||
| + | </ | ||
| + | |||
| + | Mas información: | ||
| + | * [[https:// | ||
| + | |||
| ===== Necesidad de Ramas ===== | ===== Necesidad de Ramas ===== | ||
| El siguiente esquema muestra el sistema de ramas que se va a usar en clase. Mas información en [[http:// | El siguiente esquema muestra el sistema de ramas que se va a usar en clase. Mas información en [[http:// | ||
| Línea 33: | Línea 75: | ||
| Pasos a seguir para hacer una modificación. | Pasos a seguir para hacer una modificación. | ||
| - | * Crea la rama '' | + | * Crea la rama '' |
| - | * Realizar | + | * Ir a la carpeta del worktree y realizar |
| - | * Mergear | + | * En el worktree, mergear |
| - | * Ir a la rama '' | + | * Ir a la carpeta principal (que está en '' |
| - | * Borrar la rama '' | + | |
| * Subir la rama '' | * Subir la rama '' | ||
| + | * Borrar el worktree de la '' | ||
| * Mergear la rama '' | * Mergear la rama '' | ||
| * Mergear la rama '' | * Mergear la rama '' | ||
| Línea 58: | Línea 100: | ||
| git push -u | git push -u | ||
| + | </ | ||
| + | \\ | ||
| + | \\ | ||
| + | * Crear una rama de feature desde '' | ||
| + | |||
| + | <sxh bash> | ||
| + | git worktree add -b lorenzo_45 ../ | ||
| + | cd ../ | ||
| + | git push --set-upstream origin lorenzo_45 | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | \\ | ||
| + | * Borrar el worktree de una rama (antes de borrar la rama). Se hace desde la carpeta principal: | ||
| + | |||
| + | <sxh bash> | ||
| + | git worktree remove ../ | ||
| </ | </ | ||
| \\ | \\ | ||
| Línea 64: | Línea 123: | ||
| <sxh bash> | <sxh bash> | ||
| - | git fetch --prune | + | git fetch --prune |
| git switch nuevaRama | git switch nuevaRama | ||
| Línea 299: | Línea 358: | ||
| - | * Merge en develop de nuestra rama de feature **con un solo commit** con '' | + | * Merge en develop de nuestra rama de feature **con un solo commit** con '' |
| <sxh bash> | <sxh bash> | ||
| - | | + | |
| git merge --squash lorenzo_42 | git merge --squash lorenzo_42 | ||
| git commit -am " | git commit -am " | ||
| Línea 314: | Línea 373: | ||
| - | * Mergear | + | * Mergear |
| <sxh bash> | <sxh bash> | ||
| - | | + | |
| git merge develop | git merge develop | ||
| Línea 477: | Línea 536: | ||
| <sxh bash> | <sxh bash> | ||
| - | git switch | + | cd ../ |
| git merge --squash Lorenzo_3 | git merge --squash Lorenzo_3 | ||
| vi index.html | vi index.html | ||
| Línea 517: | Línea 576: | ||
| <sxh bash> | <sxh bash> | ||
| - | git switch | + | cd ../ |
| git merge develop | git merge develop | ||
| vi index.html | vi index.html | ||
| Línea 527: | Línea 586: | ||
| ===== Recetas ===== | ===== Recetas ===== | ||
| + | |||
| + | < | ||
| * Bajarse lo último de las 3 ramas. | * Bajarse lo último de las 3 ramas. | ||
| Línea 547: | Línea 608: | ||
| - | * Proceso completo para hacer una modificacion en la propia rama y ponerla en develop | + | * Proceso completo para hacer una modificacion en la propia rama (con su worktree) |
| <sxh bash> | <sxh bash> | ||
| #Día 1:Lunes | #Día 1:Lunes | ||
| # Crear el issue. Tiene número 45 | # Crear el issue. Tiene número 45 | ||
| + | cd mi-proyecto | ||
| git fetch --prune && git switch develop && git merge --ff-only origin/ | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| - | git branch | + | git worktree add -b lorenzo_45 |
| - | git switch | + | cd ../ |
| git push --set-upstream origin lorenzo_45 | git push --set-upstream origin lorenzo_45 | ||
| git commit -m " | git commit -m " | ||
| Línea 564: | Línea 626: | ||
| #Día 2:Martes | #Día 2:Martes | ||
| + | cd ../ | ||
| git fetch --prune && git switch develop && git merge --ff-only origin/ | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| - | git switch | + | cd ../ |
| git merge develop | git merge develop | ||
| git commit -m " | git commit -m " | ||
| Línea 575: | Línea 638: | ||
| #Día 3:Miercoles | #Día 3:Miercoles | ||
| + | cd ../ | ||
| git fetch --prune && git switch develop && git merge --ff-only origin/ | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| - | git switch | + | cd ../ |
| git merge develop | git merge develop | ||
| git commit -m " | git commit -m " | ||
| Línea 587: | Línea 651: | ||
| #Día 4: Jueves | #Día 4: Jueves | ||
| + | cd ../ | ||
| git fetch --prune && git switch develop && git merge --ff-only origin/ | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| - | git switch | + | cd ../ |
| git merge develop | git merge develop | ||
| git commit -m " | git commit -m " | ||
| Línea 599: | Línea 664: | ||
| #Día 5: Viernes | #Día 5: Viernes | ||
| + | cd ../ | ||
| git fetch --prune && git switch develop && git merge --ff-only origin/ | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| - | git switch | + | cd ../ |
| git merge develop | git merge develop | ||
| - | git switch | + | cd ../ |
| git merge --squash lorenzo_45 | git merge --squash lorenzo_45 | ||
| git commit -am " | git commit -am " | ||
| Línea 613: | Línea 679: | ||
| git push origin --delete lorenzo_45 | git push origin --delete lorenzo_45 | ||
| + | git worktree remove ../ | ||
| git branch --delete --force lorenzo_45 | git branch --delete --force lorenzo_45 | ||
| Línea 623: | Línea 690: | ||
| ===== Ejercicios ===== | ===== Ejercicios ===== | ||
| + | En los ejercicios hay 2 usuarios: el **usuario A** y el **usuario B**. Cada uno trabaja en su propia carpeta (puede ser en el mismo ordenador) y ambos suben sus cambios al mismo repositorio de GitHub. | ||
| - | ==== Ejercicio 1 ==== | + | Antes de empezar: |
| - | * Crea un proyecto de Git con dos ficheros | + | * Crea un repositorio en GitHub |
| - | * Luego crea las siguientes tres ramas: | + | * Usuario A y usuario B: clonad el repositorio cada uno en su carpeta. |
| - | * master | + | |
| - | * release | + | |
| - | * develop | + | |
| - | * Sube las 3 ramas a GitHub. | + | |
| - | * Desde develop ahora crea una rama llamada | + | |
| - | * Añade un nuevo fichero a la rama '' | + | |
| - | * Sube la rama '' | + | |
| - | * Mergea la rama '' | + | |
| - | * Borra la rama '' | + | |
| - | * Borra la rama '' | + | |
| - | * Mergea la rama '' | + | |
| - | * Mergea la rama '' | + | |
| - | * Sube las ramas '' | + | |
| + | ==== Ejercicio 1 ==== | ||
| + | Un solo usuario, sin conflictos. | ||
| + | * Usuario A: Crea la rama '' | ||
| + | * Usuario A: Haz un cambio en '' | ||
| + | * Usuario A: Haz otro cambio en '' | ||
| + | * Usuario A: Ve a '' | ||
| + | * Usuario A: Mergea la rama '' | ||
| + | * Usuario A: Sube los cambios de '' | ||
| + | * Usuario A: Borra la rama '' | ||
| ==== Ejercicio 2 ==== | ==== Ejercicio 2 ==== | ||
| - | Vamos a seguir con el ejercicio anterior pero ahora con 2 usuarios distintos | + | Dos usuarios |
| - | + | | |
| - | | + | * Usuario |
| - | * Usuario | + | * Usuario |
| - | + | * Usuario | |
| - | * Usuario | + | * Usuario |
| - | * Usuario | + | * Usuario |
| - | + | * Usuario | |
| - | + | * Usuario | |
| - | * Usuario | + | * Usuario |
| - | * Usuario | + | * Usuario |
| - | + | * Usuario | |
| - | * Usuario | + | * Usuario |
| - | * Usuario 2: Borra la rama '' | + | * Usuario |
| - | + | ||
| - | * Usuario | + | |
| - | * Usuario | + | |
| - | * Usuario 1: Sube las ramas '' | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | * Usuario | + | |
| - | * Usuario | + | |
| - | * Usuario 2: Sube la rama '' | + | |
| - | * Usuario | + | |
| - | * Usuario | + | |
| - | * Usuario 2: Sube las ramas '' | + | |
| ==== Ejercicio 3 ==== | ==== Ejercicio 3 ==== | ||
| - | Vamos a seguir con el ejercicio anterior pero ahora con 2 usuarios | + | Dos usuarios |
| - | + | ||
| - | + | ||
| - | * Usuario 1:Desde '' | + | |
| - | * Usuario 2:Desde '' | + | |
| - | + | ||
| - | * Usuario 1: Baja la rama '' | + | |
| - | * Usuario 2: Baja la rama '' | + | |
| - | + | ||
| - | + | ||
| - | * Usuario 1: Mergea la rama '' | + | |
| - | * Usuario 2: Mergea la rama '' | + | |
| - | + | ||
| - | * Usuario 1: Borra la rama '' | + | |
| - | * Usuario 2: Borra la rama '' | + | |
| - | + | ||
| - | * Usuario 1: Mergea la rama '' | + | |
| - | * Usuario 1: Mergea la rama '' | + | |
| - | * Usuario 1: Sube las ramas '' | + | |
| - | + | ||
| - | + | ||
| - | * Usuario 2: Sube la rama '' | + | |
| - | * Usuario 2: Baja los cambios de '' | + | |
| - | * Usuario 2: Sube la rama '' | + | |
| - | * Usuario 2: Mergea la rama '' | + | |
| - | * Usuario 2: Mergea la rama '' | + | |
| - | * Usuario 2: Sube las ramas '' | + | |
| + | * Usuario A y usuario B: Actualizad '' | ||
| + | * Usuario A: Crea la rama '' | ||
| + | * Usuario B: Crea la rama '' | ||
| + | * Usuario A: Haz un cambio en '' | ||
| + | * Usuario B: Haz un cambio en '' | ||
| + | * Usuario A: Ve a '' | ||
| + | * Usuario B: Ve a '' | ||
| + | * Usuario A: Mergea la rama '' | ||
| + | * Usuario B: Mergea la rama '' | ||
| + | * Usuario A: Sube los cambios de '' | ||
| + | * Usuario B: Sube los cambios de '' | ||
| + | * Usuario A: Borra la rama '' | ||
| + | * Usuario B: Borra la rama '' | ||
| ==== Ejercicio 4 ==== | ==== Ejercicio 4 ==== | ||
| - | Vamos a seguir con el ejercicio anterior | + | Dos usuarios que modifican |
| + | * Usuario A y usuario B: Actualizad '' | ||
| + | * Usuario A: Crea la rama '' | ||
| + | * Usuario B: Crea la rama '' | ||
| + | * Usuario A: Ve a '' | ||
| + | * Usuario A: Borra la rama '' | ||
| + | * Usuario B: Ve a '' | ||
| + | * Usuario B: Ve a la rama '' | ||
| + | * Usuario B: Ve a '' | ||
| + | * Usuario B: Mergea '' | ||
| + | * Usuario B: Borra la rama '' | ||
| - | | + | ==== Ejercicio 5 ==== |
| - | * Usuario | + | |
| + | * Usuario A: Baja la última versión de '' | ||
| + | * Usuario | ||
| + | ==== Ejercicio 6 ==== | ||
| + | * Usuario B: Baja la última versión de '' | ||
| + | * Usuario B: Baja la última versión de '' | ||
| + | * Usuario B: Mergea en '' | ||
| - | * Usuario 2:Desde '' | ||
| - | * Usuario 2: Mergea la rama '' | ||
| + | ==== Ejercicio 7 ==== | ||
| + | Es como el ejercicio 1 pero ahora usando un worktree para la rama de feature (ver el apartado [[# | ||
| - | | + | En este ejercicio se trabaja en **2 carpetas distintas**. Suponiendo que el repositorio se clonó |
| - | * Usuario 2: Mergea la rama '' | + | |
| + | dev/ | ||
| + | ├── mi-proyecto | ||
| + | └── mi-proyecto-wt-A8 | ||
| - | * Usuario 1: Borra la rama '' | + | En cada paso se indica entre corchetes |
| - | * Usuario 2: Borra la rama '' | + | |
| - | * Usuario 2: Borra la rama '' | + | |
| - | + | ||
| - | * Usuario 1: Mergea la rama '' | + | |
| - | * Usuario 1: Mergea la rama '' | + | |
| - | * Usuario 1: Sube las ramas '' | + | |
| - | + | ||
| - | + | ||
| - | * Usuario 2: Sube la rama '' | + | |
| - | * Usuario 2: Baja los cambios de '' | + | |
| - | * Usuario 2: Sube la rama '' | + | |
| - | * Usuario 2: Mergea la rama '' | + | |
| - | * Usuario 2: Mergea la rama '' | + | |
| - | * Usuario 2: Sube las ramas '' | + | |
| - | + | ||
| - | + | ||
| - | ==== Ejercicio 5 ==== | + | |
| - | Crea un nuevo proyecto en Git. | + | |
| - | + | ||
| - | * Usuario 1:Crea una rama llamada '' | + | |
| - | * Usuario 2: Haz un Pull y comprueba que existe la rama '' | + | |
| - | * Usuario 1: Borra la rama '' | + | <note tip>Si en algún momento no sabes en qué carpeta ni en qué rama estás, ejecuta |
| - | * Usuario 2: Haz un Fetch y comprueba que aun está la rama '' | + | |
| - | * Usuario | + | * Usuario |
| - | * Usuario 2: Fetch (SIN PRUNE) | + | * Usuario |
| - | * Usuario | + | * Usuario A **['' |
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | ===== Skills ===== | ||
| + | * Para seguir el flujo de trabajo se recomienda el siguiente skills:{{ : | ||
clase/daw/daw/1eval/tema02.1762166239.txt.gz · Última modificación: por 127.0.0.1
