Herramientas de usuario

Herramientas del sitio


clase:daw:daw:1eval:tema02

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
clase:daw:daw:1eval:tema02 [2025/11/03 11:37] – creado - editor externo 127.0.0.1clase:daw:daw:1eval:tema02 [2026/10/08 08:19] (actual) – [Ejercicios] Lorenzo
Línea 10: Línea 10:
  
 {{:clase:daw:daw:1eval:camino_git.png|}} {{:clase:daw:daw:1eval:camino_git.png|}}
 +===== 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 ''lorenzo_45'' y queremos trabajar en ''lorenzo_46'' tenemos que hacer un ''git switch'', y los ficheros de la carpeta cambian por los de la otra 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 (''.git''): los mismos commits, las mismas ramas y el mismo ''origin''. Es decir, un commit hecho en un worktree se ve inmediatamente desde los demás sin necesidad de hacer ''push'' ni ''fetch''.
 +
 +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 ''develop''. Ahí se actualizan ''develop'', ''release'' y ''master'' y se hacen los merges entre ellas.
 +  * Cada feature vive en su propia carpeta, **hermana** de la principal, llamada ''<repositorio>-wt-<rama>''.
 +  * Al acabar la feature, se borra su worktree y su rama.
 +
 +Por ejemplo, si el repositorio está en ''/home/lorenzo/dev/mi-proyecto'':
 +
 +  /home/lorenzo/dev/
 +  ├── mi-proyecto                 <- carpeta principal, siempre en develop
 +  ├── mi-proyecto-wt-lorenzo_45   <- worktree de la rama lorenzo_45
 +  └── mi-proyecto-wt-lorenzo_46   <- worktree de la rama lorenzo_46
 +
 +**¿Por qué usar worktrees?** Para que **los agentes de IA (como Claude Code, Codex, etc.) puedan trabajar en paralelo con varias features**. Si dos agentes trabajan en la misma carpeta, uno haría un ''git switch'' y le cambiaría los ficheros al otro a mitad de su trabajo, o mezclarían sus cambios en la misma rama. Con un worktree por feature, cada agente tiene su propia carpeta y su propia rama, y no se molestan entre ellos. Mientras tanto, nosotros podemos seguir trabajando en otra feature o revisando lo que hacen.
 +
 +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 ../mi-proyecto-wt-lorenzo_45 develop
 +
 +  # 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 ../mi-proyecto-wt-lorenzo_45
 +</sxh>
 +
 +<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 ''git switch develop'' (''develop'' ya está activa en la carpeta principal). Para trabajar con ''develop'' hay que ir a la carpeta principal.
 +  * No se puede borrar una rama que tiene un worktree. Primero hay que borrar el worktree con ''git worktree remove'' y luego la rama.
 +  * ''git worktree remove'' falla si hay ficheros modificados o sin seguimiento en el worktree. No uséis ''--force'': revisad primero qué ficheros son.
 +  * No borréis la carpeta de un worktree a mano con ''rm -rf''. Si ya lo habéis hecho, ejecutad ''git worktree prune'' para que Git se olvide de él.
 +</note>
 +
 +Mas información:
 +  * [[https://git-scm.com/docs/git-worktree|git-worktree]]: Documentación oficial
 +
 ===== 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://nvie.com/posts/a-successful-git-branching-model/|A successful Git branching model]] El siguiente esquema muestra el sistema de ramas que se va a usar en clase. Mas información en [[http://nvie.com/posts/a-successful-git-branching-model/|A successful Git branching model]]
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 ''feature'' desde ''develop''. +  * Crea la rama ''feature'' desde ''develop'' **y su worktree** en una carpeta hermana (''<repositorio>-wt-feature''). 
-  * Realizar la tarea con tantos commits como sea necesario. +  * Ir a la carpeta del worktree y realizar la tarea con tantos commits como sea necesario. 
-  * Mergear la rama ''develop'' en ''feature'' ya que así se resuelven los problemas de  mergeo en la rama ''feature'' +  * En el worktree, mergear la rama ''develop'' en ''feature'' ya que así se resuelven los problemas de  mergeo en la rama ''feature'' 
-  * Ir a la rama ''develop'' y mergear la rama ''feature'' con ''--squash'' +  * Ir a la carpeta principal (que está en ''develop'') y mergear la rama ''feature'' con ''--squash''
-  * Borrar la rama ''feature''+
   * Subir la rama ''develop''   * Subir la rama ''develop''
 +  * Borrar el worktree de la ''feature'' y luego la rama ''feature''
   * Mergear la rama ''develop'' en ''release'' y subir ''release''   * Mergear la rama ''develop'' en ''release'' y subir ''release''
   * Mergear la rama ''release'' en ''master'' y subir ''master''   * Mergear la rama ''release'' en ''master'' y subir ''master''
Línea 58: Línea 100:
   git push -u             origin nuevaRama   git push -u             origin nuevaRama
  
 +</sxh>
 +\\
 +\\
 +  * Crear una rama de feature desde ''develop'' con su worktree y subirla (es lo que haremos siempre a partir de ahora). Se hace desde la carpeta principal:
 +
 +<sxh bash>
 +  git worktree add -b lorenzo_45 ../mi-proyecto-wt-lorenzo_45 develop
 +  cd ../mi-proyecto-wt-lorenzo_45
 +  git push --set-upstream origin lorenzo_45
 +</sxh>
 +
 +\\
 +\\
 +  * Borrar el worktree de una rama (antes de borrar la rama). Se hace desde la carpeta principal:
 +
 +<sxh bash>
 +  git worktree remove ../mi-proyecto-wt-lorenzo_45
 </sxh> </sxh>
 \\ \\
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 ''--squash'' (Antes hemos actualizado develop desde GitHub).+  * Merge en develop de nuestra rama de feature **con un solo commit** con ''--squash'' (Antes hemos actualizado develop desde GitHub). Se hace desde la carpeta principal, que ya está en ''develop''.
  
  
 <sxh bash> <sxh bash>
-  git switch develop+  cd ../mi-proyecto
   git merge  --squash lorenzo_42   git merge  --squash lorenzo_42
   git commit -am "feat(#42):pantalla de Login"   git commit -am "feat(#42):pantalla de Login"
Línea 314: Línea 373:
  
  
-  * Mergear  los cambios de develop en nuestra rama para ir solucionado los conflictos poco a poco (Antes hemos actualizado develop desde GitHub). +  * Mergear  los cambios de develop en nuestra rama para ir solucionado los conflictos poco a poco (Antes hemos actualizado develop desde GitHub en la carpeta principal). Se hace desde el worktree de la feature. Como todos los worktrees comparten el repositorio, la rama ''develop'' que hemos actualizado en la carpeta principal ya está disponible en el worktree.
  
 <sxh bash> <sxh bash>
-  git switch lorenzo_42+  cd ../mi-proyecto-wt-lorenzo_42
   git merge develop   git merge develop
  
Línea 477: Línea 536:
  
 <sxh bash> <sxh bash>
-git switch develop+cd ../mi-proyecto   #La carpeta principal, que está en develop
 git merge --squash Lorenzo_3 git merge --squash Lorenzo_3
 vi index.html  #Arreglar el conflicto vi index.html  #Arreglar el conflicto
Línea 517: Línea 576:
  
 <sxh bash> <sxh bash>
-git switch Lorenzo_3+cd ../mi-proyecto-wt-Lorenzo_3   #El worktree de la rama Lorenzo_3
 git merge develop git merge develop
 vi index.html  #Arreglar el conflicto vi index.html  #Arreglar el conflicto
Línea 527: Línea 586:
  
 ===== Recetas ===== ===== Recetas =====
 +
 +<note>Las recetas que trabajan con ''develop'', ''release'' y ''master'' se ejecutan **siempre en la carpeta principal** del repositorio, nunca en el worktree de una feature.</note>
  
   * 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) y ponerla en develop. Suponemos que el repositorio está en la carpeta ''mi-proyecto''
  
 <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   #Carpeta principal, siempre en develop
 git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop
-git branch lorenzo_45 +git worktree add -b lorenzo_45 ../mi-proyecto-wt-lorenzo_45 develop 
-git switch lorenzo_45+cd ../mi-proyecto-wt-lorenzo_45   #A partir de aquí se trabaja en el worktree
 git push --set-upstream origin lorenzo_45 git push --set-upstream origin lorenzo_45
 git commit -m "micro-commit-dia-1-a" git commit -m "micro-commit-dia-1-a"
Línea 564: Línea 626:
  
 #Día 2:Martes #Día 2:Martes
 +cd ../mi-proyecto
 git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop
-git switch lorenzo_45+cd ../mi-proyecto-wt-lorenzo_45
 git merge develop git merge develop
 git commit -m "micro-commit-dia-2-a" git commit -m "micro-commit-dia-2-a"
Línea 575: Línea 638:
  
 #Día 3:Miercoles #Día 3:Miercoles
 +cd ../mi-proyecto
 git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop
-git switch lorenzo_45+cd ../mi-proyecto-wt-lorenzo_45
 git merge develop git merge develop
 git commit -m "micro-commit-dia-3-a" git commit -m "micro-commit-dia-3-a"
Línea 587: Línea 651:
  
 #Día 4: Jueves #Día 4: Jueves
 +cd ../mi-proyecto
 git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop
-git switch lorenzo_45+cd ../mi-proyecto-wt-lorenzo_45
 git merge develop git merge develop
 git commit -m "micro-commit-dia-4-a" git commit -m "micro-commit-dia-4-a"
Línea 599: Línea 664:
  
 #Día 5: Viernes #Día 5: Viernes
 +cd ../mi-proyecto
 git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop
-git switch lorenzo_45+cd ../mi-proyecto-wt-lorenzo_45
 git merge develop git merge develop
  
-git switch develop+cd ../mi-proyecto   #Volvemos a la carpeta principal, que está en develop
 git merge --squash lorenzo_45 git merge --squash lorenzo_45
 git commit -am "feat(#45):Crear la pantalla de login" git commit -am "feat(#45):Crear la pantalla de login"
Línea 613: Línea 679:
  
 git push origin --delete lorenzo_45 git push origin --delete lorenzo_45
 +git worktree remove ../mi-proyecto-wt-lorenzo_45   #Primero el worktree, luego la rama
 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 con las ramas ''master'' (o ''main''), ''release'' y ''develop'' y con los ficheros ''A.txt'', ''B.txt'' y ''comun.txt''. 
-  * 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 ''feature_40'' +
-  * Añade un nuevo fichero a la rama ''feature_40'' y modifica el fichero varias veces para crear varios "microcommits". +
-  * Sube la rama ''feature_40'' +
-  * Mergea la rama ''feature_40'' en ''develop'' +
-  * Borra la rama ''feature_40'' en local +
-  * Borra la rama ''feature_40'' en remoto +
-  * Mergea la rama ''develop'' en ''release'' +
-  * Mergea la rama ''release'' en ''master'' +
-  * Sube las ramas ''develop'', ''release'' y ''master'' a GitHub+
  
 +==== Ejercicio 1 ====
 +Un solo usuario, sin conflictos.
  
 +  * Usuario A: Crea la rama ''A1'' desde ''develop''.
 +  * Usuario A: Haz un cambio en ''A.txt'', haz commit y push.
 +  * Usuario A: Haz otro cambio en ''A.txt'', haz commit y push.
 +  * Usuario A: Ve a ''develop'' y baja la última versión de ''develop'' desde GitHub.
 +  * Usuario A: Mergea la rama ''A1'' en ''develop'' con ''--squash''.
 +  * Usuario A: Sube los cambios de ''develop''.
 +  * Usuario A: Borra la rama ''A1'' en local y en remoto.
  
 ==== Ejercicio 2 ==== ==== Ejercicio 2 ====
-Vamos a seguir con el ejercicio anterior pero ahora con 2 usuarios distintos (se puede hacer en 2 carpetas distintas)+Dos usuarios que modifican ficheros distintos, por lo que el segundo que sube ''develop'' tendrá que hacer un ''rebase'' pero sin conflictos.
  
- +  * Usuario A y usuario B: Actualizad ''develop'' desde GitHub. 
-  * Usuario 1:Desde ''develop'' ahora crea una rama llamada ''feat_50'', añade un fichero  y modifica el fichero varias veces para crear varios "microcommits". Sube la rama a GitHub +  * Usuario A: Crea la rama ''A2'' desde ''develop''. 
-  * Usuario 2:Desde ''develop'' ahora crea una rama llamada ''fix_51'', añade otro fichero  y modifica el fichero varias veces para crear varios "microcommits". Sube la rama a GitHub +  * Usuario B: Crea la rama ''B2'' desde ''develop''. 
- +  * Usuario A: Haz un cambio en ''A.txt'', haz commit y push. 
-  * Usuario 1: Baja la rama ''develop'' de remoto +  * Usuario B: Haz un cambio en ''B.txt'', haz commit y push. 
-  * Usuario 2: Baja la rama ''develop'' de remoto +  * Usuario A: Ve a ''develop'' y baja la última versión de ''develop'' desde GitHub. 
- +  * Usuario B: Ve a ''develop'' y baja la última versión de ''develop'' desde GitHub. 
- +  * Usuario A: Mergea la rama ''A2'' en ''develop'' con ''--squash''. 
-  * Usuario 1: Mergea la rama ''feat_50'' en ''develop'' +  * Usuario B: Mergea la rama ''B2'' en ''develop'' con ''--squash''. 
-  * Usuario 2: Mergea la rama ''fix_51'' en ''develop'' +  * Usuario A: Sube los cambios de ''develop''. 
- +  * Usuario B: Sube los cambios de ''develop''. No te dejará. Haz un ''rebase'' de ''origin/develop'' y vuelve a subirlos. 
-  * Usuario 1: Borra la rama ''feat_50'' en local y en remoto  +  * Usuario A: Borra la rama ''A2'' en local y en remoto. 
-  * Usuario 2: Borra la rama ''feat_51'' en local y en remoto  +  * Usuario B: Borra la rama ''B2'' en local y en remoto.
- +
-  * Usuario 1: Mergea la rama ''develop'' en ''release'' +
-  * Usuario 1: Mergea la rama ''release'' en ''master'' +
-  * Usuario 1: Sube las ramas ''develop'', ''release'' y ''master'' a GitHub +
- +
- +
- +
-  * Usuario 2: Sube la rama ''develop'' a remoto. No te dejará.  +
-  * Usuario 2: Baja los cambios de ''develop'' en remoto y haz un rebase para mergearlos +
-  * Usuario 2: Sube la rama ''develop'' a remoto. Ya te dejará. +
-  * Usuario 2: Mergea la rama ''develop'' en ''release'' +
-  * Usuario 2: Mergea la rama ''release'' en ''master'' +
-  * Usuario 2: Sube las ramas ''develop'', ''release'' y ''master'' a GitHub +
  
 ==== Ejercicio 3 ==== ==== Ejercicio 3 ====
-Vamos a seguir con el ejercicio anterior pero ahora con 2 usuarios distintos (se puede hacer en 2 carpetas distintas). +Dos usuarios que modifican el mismo fichero, por lo que el conflicto aparecerá al hacer el ''rebase'' en ''develop''.
- +
- +
-  * Usuario 1:Desde ''develop'' ahora crea una rama llamada ''feat_60'', modifica un fichero y hazlo varias veces para crear varios "microcommits". Sube la rama a GitHub +
-  * Usuario 2:Desde ''develop'' ahora crea una rama llamada ''feat_61'', modifica el mismo fichero y en las mismas lineas y hazlo varias veces para crear varios "microcommits". Sube la rama a GitHub +
- +
-  * Usuario 1: Baja la rama ''develop'' de remoto +
-  * Usuario 2: Baja la rama ''develop'' de remoto +
- +
- +
-  * Usuario 1: Mergea la rama ''feat_60'' en ''develop'' +
-  * Usuario 2: Mergea la rama ''feat_61'' en ''develop'' +
- +
-  * Usuario 1: Borra la rama ''feat_60'' en local y en remoto  +
-  * Usuario 2: Borra la rama ''feat_61'' en local y en remoto  +
- +
-  * Usuario 1: Mergea la rama ''develop'' en ''release'' +
-  * Usuario 1: Mergea la rama ''release'' en ''master'' +
-  * Usuario 1: Sube las ramas ''develop'', ''release'' y ''master'' a GitHub +
- +
- +
-  * Usuario 2: Sube la rama ''develop'' a remoto. No te dejará.  +
-  * Usuario 2: Baja los cambios de ''develop'' en remoto y haz un rebase para mergearlos. Tendrás que solucionar el conflicto +
-  * Usuario 2: Sube la rama ''develop'' a remoto. Ya te dejará. +
-  * Usuario 2: Mergea la rama ''develop'' en ''release'' +
-  * Usuario 2: Mergea la rama ''release'' en ''master'' +
-  * Usuario 2: Sube las ramas ''develop'', ''release'' y ''master'' a GitHub  +
  
 +  * Usuario A y usuario B: Actualizad ''develop'' desde GitHub.
 +  * Usuario A: Crea la rama ''A3'' desde ''develop''.
 +  * Usuario B: Crea la rama ''B3'' desde ''develop''.
 +  * Usuario A: Haz un cambio en ''comun.txt'', haz commit y push.
 +  * Usuario B: Haz un cambio en ''comun.txt'' en las mismas líneas, haz commit y push.
 +  * Usuario A: Ve a ''develop'' y baja la última versión de ''develop'' desde GitHub.
 +  * Usuario B: Ve a ''develop'' y baja la última versión de ''develop'' desde GitHub.
 +  * Usuario A: Mergea la rama ''A3'' en ''develop'' con ''--squash''.
 +  * Usuario B: Mergea la rama ''B3'' en ''develop'' con ''--squash''.
 +  * Usuario A: Sube los cambios de ''develop''.
 +  * Usuario B: Sube los cambios de ''develop''. No te dejará. Haz un ''rebase'' de ''origin/develop'', resuelve el conflicto y vuelve a subirlos.
 +  * Usuario A: Borra la rama ''A3'' en local y en remoto.
 +  * Usuario B: Borra la rama ''B3'' en local y en remoto.
  
 ==== Ejercicio 4 ==== ==== Ejercicio 4 ====
-Vamos a seguir con el ejercicio anterior pero ahora con 2 usuarios distintos (se puede hacer en 2 carpetas distintas).+Dos usuarios que modifican el mismo fichero, pero ahora el conflicto se resuelve **en la rama de feature** mergeando ''develop'' en ella, que es la forma recomendada de trabajar.
  
 +  * Usuario A y usuario B: Actualizad ''develop'' desde GitHub.
 +  * Usuario A: Crea la rama ''A4'' desde ''develop''. Modifica ''comun.txt'', haz commit y push.
 +  * Usuario B: Crea la rama ''B4'' desde ''develop''. Modifica ''comun.txt'' en las mismas líneas, haz commit y push.
 +  * Usuario A: Ve a ''develop'', actualiza ''develop'' desde GitHub, mergea ''A4'' con ''--squash'' y haz push.
 +  * Usuario A: Borra la rama ''A4'' en local y en remoto.
 +  * Usuario B: Ve a ''develop'' y actualiza ''develop'' desde GitHub.
 +  * Usuario B: Ve a la rama ''B4'', mergea ''develop'', resuelve el conflicto y haz push.
 +  * Usuario B: Ve a ''develop'' y actualiza ''develop'' desde GitHub.
 +  * Usuario B: Mergea ''B4'' en ''develop'' con ''--squash'' y haz push. Ahora no habrá conflicto, ya que se resolvió en la rama ''B4''.
 +  * Usuario B: Borra la rama ''B4'' en local y en remoto.
  
-  * Usuario 1:Desde ''develop'' ahora crea una rama llamada ''feat_70'', modifica un fichero y hazlo varias veces para crear varios "microcommits". Sube la rama a GitHub +==== Ejercicio 5 ==== 
-  * Usuario 1: Mergea la rama ''feat_70'' en ''develop''+  * Usuario A: Baja la última versión de ''develop'' desde GitHub. 
 +  * Usuario A: Baja la última versión de ''release'' desde GitHub. 
 +  * Usuario A: Mergea en ''release'' la rama ''develop'' con ''--ff-only'' y haz push.
  
 +==== Ejercicio 6 ====
 +  * Usuario B: Baja la última versión de ''release'' desde GitHub.
 +  * Usuario B: Baja la última versión de ''master'' (o ''main'') desde GitHub.
 +  * Usuario B: Mergea en ''master'' (o ''main'') la rama ''release'' con ''--ff-only'' y haz push.
  
-  * Usuario 2:Desde ''develop'' ahora crea una rama llamada ''feat_71'', modifica el mismo fichero y en las mismas lineas y hazlo varias veces para crear varios "microcommits". Sube la rama a GitHub 
-  * Usuario 2: Mergea la rama ''feat_71'' en ''develop'' 
  
 +==== Ejercicio 7 ====
 +Es como el ejercicio 1 pero ahora usando un worktree para la rama de feature (ver el apartado [[#worktrees|Worktrees]]). La carpeta donde clonaste el repositorio será la carpeta principal y se quedará siempre en ''develop''.
  
-  * Usuario 2:Desde ''develop'' ahora crea una rama llamada ''feat_72'', modifica el mismo fichero y en las mismas lineas y hazlo varias veces para crear varios "microcommits". Sube la rama a GitHub +En este ejercicio se trabaja en **2 carpetas distintas**. Suponiendo que el repositorio se clonó en ''mi-proyecto'':
-  * Usuario 2: Mergea la rama ''feat_72'' en ''develop''+
  
 +  dev/
 +  ├── mi-proyecto         <- carpeta principal, siempre en develop
 +  └── mi-proyecto-wt-A8   <- worktree de la rama A8
  
-  * Usuario 1: Borra la rama ''feat_70'' en local y en remoto  +En cada paso se indica entre corchetes en qué carpeta hay que estar.
-  * Usuario 2: Borra la rama ''feat_71'' en local y en remoto  +
-  * Usuario 2: Borra la rama ''feat_72'' en local y en remoto  +
-  +
-  * Usuario 1: Mergea la rama ''develop'' en ''release'' +
-  * Usuario 1: Mergea la rama ''release'' en ''master'' +
-  * Usuario 1: Sube las ramas ''develop'', ''release'' y ''master'' a GitHub +
- +
- +
-  * Usuario 2: Sube la rama ''develop'' a remoto. No te dejará.  +
-  * Usuario 2: Baja los cambios de ''develop'' en remoto y haz un rebase para mergearlos. Tendrás que solucionar varias veces el conflicto ya que había varios commits pendientes. +
-  * Usuario 2: Sube la rama ''develop'' a remoto. Ya te dejará. +
-  * Usuario 2: Mergea la rama ''develop'' en ''release'' +
-  * Usuario 2: Mergea la rama ''release'' en ''master'' +
-  * Usuario 2: Sube las ramas ''develop'', ''release'' y ''master'' a GitHub  +
- +
- +
-==== Ejercicio 5 ==== +
-Crea un nuevo proyecto en Git. +
- +
-  * Usuario 1:Crea una rama llamada ''prueba'' y la subes a Git +
-  * Usuario 2: Haz un Pull y comprueba que existe la rama ''origin/prueba'' en local  y ''prueba'' en remoto+
  
-  * Usuario 1: Borra la rama ''prueba'' en local +<note tip>Si en algún momento no sabes en qué carpeta ni en qué rama estás, ejecuta ''pwd'' y ''git branch --show-current''.</note>
-  * Usuario 2: Haz un Fetch y comprueba que aun está la rama ''origin/prueba'' en local  y ''prueba'' en remoto+
  
-  * Usuario 1: Borra la rama ''prueba'' en remoto +  * Usuario A **[''mi-proyecto'']**: Crea la rama ''A8'' desde ''develop'' y su worktree en la carpeta hermana ''mi-proyecto-wt-A8''. 
-  * Usuario 2: Fetch (SIN PRUNE) y comprueba que aun está la rama ''origin/prueba'' en local  pero ya NO está ''prueba'' en remoto +  * Usuario A **[''mi-proyecto'']**: Comprueba con ''git worktree list'' que existen los 2 worktrees. 
-  * Usuario 2: Fetch (CON PRUNE) y ya NO está la rama ''origin/prueba'' en local+  * Usuario A **[''mi-proyecto-wt-A8'']**: Haz ''cd ../mi-proyecto-wt-A8'' y sube la rama ''A8'' a GitHub. 
 +  * Usuario A **[''mi-proyecto-wt-A8'']**: Haz un cambio en ''A.txt'', haz commit y push. 
 +  * Usuario A **[''mi-proyecto-wt-A8'']**: Haz otro cambio en ''A.txt'', haz commit y push. 
 +  * Usuario A **[''mi-proyecto'']**: Haz ''cd ../mi-proyecto'' y comprueba que ''A.txt'' sigue sin los cambios, ya que esta carpeta está en ''develop''. 
 +  * Usuario A **[''mi-proyecto'']**: Baja la última versión de ''develop'' desde GitHub. 
 +  * Usuario A **[''mi-proyecto'']**: Mergea la rama ''A8'' en ''develop'' con ''--squash''. 
 +  * Usuario A **[''mi-proyecto'']**: Sube los cambios de ''develop''. 
 +  * Usuario A **[''mi-proyecto'']**: Borra el worktree de ''A8'' con ''git worktree remove ../mi-proyecto-wt-A8'' y comprueba que ya no existe la carpeta ''mi-proyecto-wt-A8''. 
 +  * Usuario A **[''mi-proyecto'']**: Borra la rama ''A8'' en local y en remoto.
  
 +===== Skills =====
 +  * Para seguir el flujo de trabajo se recomienda el siguiente skills:{{ :clase:daw:daw:1eval:git-flow-skill.md |}}
  
clase/daw/daw/1eval/tema02.1762166239.txt.gz · Última modificación: por 127.0.0.1