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

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
clase:daw:daw:1eval:tema02 [2026/10/07 12:04] – Lorenzoclase:daw:daw:1eval:tema02 [2026/10/08 08:19] (actual) – [Ejercicios] Lorenzo
Línea 123: Línea 123:
  
 <sxh bash> <sxh bash>
-  git fetch --prune   +  git fetch --prune 
   git switch nuevaRama   git switch nuevaRama
  
Línea 690: 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.
 +
 +Antes de empezar:
 +  * 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''.
 +  * Usuario A y usuario B: clonad el repositorio cada uno en su carpeta.
  
 ==== Ejercicio 1 ==== ==== Ejercicio 1 ====
-  * Crea un proyecto de Git con dos ficheros +Un solo usuario, sin conflictos.
-  * Luego crea las siguientes tres ramas: +
-    * 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 +
  
 +  * 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.1791367481.txt.gz · Última modificación: por Lorenzo