clase:daw:daw:tema02
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| clase:daw:daw:tema02 [2026/10/28 09:31] – borrado - editor externo (Fecha desconocida) 127.0.0.1 | clase:daw:daw:tema02 [2026/10/28 09:57] (actual) – ↷ Enlaces adaptados debido a una operación de mover Lorenzo | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| + | ====== 2. Git: Ramas y worktree ====== | ||
| + | En este tema vamos a ver sobre todo a tratar con ramas, merges y conflictos. | ||
| + | |||
| + | |||
| + | Mas información: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | {{clase: | ||
| + | ===== 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 ===== | ||
| + | El siguiente esquema muestra el sistema de ramas que se va a usar en clase. Mas información en [[http:// | ||
| + | |||
| + | {{clase: | ||
| + | |||
| + | {{clase: | ||
| + | |||
| + | Ejemplo de Ramas | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | Ramas a crear: | ||
| + | * develop: Lo que se ha desarrollando y el equipo de desarrollo dice que ya funciona. Cuando se quiera se pasa a '' | ||
| + | * release: Lo que se esta probando en un entorno similar al de producción. Cuando está probado, se copia a '' | ||
| + | * master: Lo que ya se puede instalar en el producción. | ||
| + | * rama de funcionalidad: | ||
| + | |||
| + | |||
| + | <note tip>En la rama de funcionalidad se pueden hacer todos los commits que queramos ya que luego se van a unificar en uno solo. Es lo que llamamos " | ||
| + | |||
| + | |||
| + | Pasos a seguir para hacer una modificación. | ||
| + | * Crea la rama '' | ||
| + | * Ir a la carpeta del worktree y realizar la tarea con tantos commits como sea necesario. | ||
| + | * En el worktree, mergear la rama '' | ||
| + | * Ir a la carpeta principal (que está en '' | ||
| + | * Subir la rama '' | ||
| + | * Borrar el worktree de la '' | ||
| + | * Mergear la rama '' | ||
| + | * Mergear la rama '' | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Usando Ramas ===== | ||
| + | Veamos ahora como se trabaja con ramas | ||
| + | |||
| + | * Crear una rama nueva y subirla | ||
| + | |||
| + | <sxh bash> | ||
| + | git branch nuevaRama | ||
| + | git switch nuevaRama | ||
| + | git push --set-upstream origin nuevaRama | ||
| + | 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 ../ | ||
| + | </ | ||
| + | \\ | ||
| + | \\ | ||
| + | * Bajar una nueva rama | ||
| + | |||
| + | <sxh bash> | ||
| + | git fetch --prune | ||
| + | git switch nuevaRama | ||
| + | |||
| + | </ | ||
| + | <note tip> | ||
| + | * '' | ||
| + | * '' | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | * Borrar una rama en local que ha sido mergeada o subida | ||
| + | |||
| + | <sxh bash> | ||
| + | git branch --delete miRama | ||
| + | git branch -d miRama | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | * Borrar una rama en local que NO ha sido mergeada ni subida (hay 3 formas distintas). Pero es usar el modificador '' | ||
| + | |||
| + | <sxh bash> | ||
| + | git branch --delete --force miRama | ||
| + | git branch -d -f miRama | ||
| + | git branch -D | ||
| + | </ | ||
| + | |||
| + | |||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | * Borrar una rama en remoto | ||
| + | |||
| + | <sxh bash> | ||
| + | git push origin --delete miRama | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Merge ===== | ||
| + | El merge es unir los commit de una rama en otra. Hay muchas formas de hacer un merge , veamos algunas de ellas. | ||
| + | |||
| + | |||
| + | ^ Comando ^ Características ^ Cuando usarlo ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ==== git rebase rama ==== | ||
| + | Pone los commits en la nueva rama siempre después de los que ya hay, es decir que los reordena. | ||
| + | |||
| + | Se usa para poner los commits de origin/ | ||
| + | |||
| + | {{clase: | ||
| + | |||
| + | |||
| + | '' | ||
| + | < | ||
| + | %%{init: { ' | ||
| + | gitGraph | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | '' | ||
| + | < | ||
| + | %%{init: { ' | ||
| + | gitGraph | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | '' | ||
| + | \\ | ||
| + | '' | ||
| + | < | ||
| + | %%{init: { ' | ||
| + | gitGraph | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ==== git merge --squash rama ==== | ||
| + | Junta todos los " | ||
| + | |||
| + | Se usa para pasar los microcommits de una rama feature a develop | ||
| + | |||
| + | {{clase: | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ==== git merge --ff-only rama ==== | ||
| + | Solo adelanta el puntero de donde está la rama. Nunca crea nuevos commits en la rama destino pero falla si es necesario crear un nuevo commit, \\ por lo que '' | ||
| + | |||
| + | Se usa De develop a Release.De release a master o para actualizar cualquier rama desde GitHub cuando no hay commits nuevos en local | ||
| + | |||
| + | {{clase: | ||
| + | |||
| + | \\ | ||
| + | |||
| + | < | ||
| + | %%{init: { ' | ||
| + | gitGraph | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | '' | ||
| + | < | ||
| + | %%{init: { ' | ||
| + | gitGraph | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | |||
| + | \\ | ||
| + | '' | ||
| + | < | ||
| + | %%{init: { ' | ||
| + | gitGraph | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== git merge rama ==== | ||
| + | Es el merge normal que puede crear nuevos commits | ||
| + | |||
| + | Se usa para resolver los conflictos desde nuestra rama feature ya que nos da igual si hay nuevos commits | ||
| + | |||
| + | {{clase: | ||
| + | |||
| + | ===== Usos de Merge ===== | ||
| + | |||
| + | |||
| + | * Bajar (o actualizar) una rama ( como master, release o develop) desde Github, | ||
| + | |||
| + | <sxh bash> | ||
| + | git fetch --prune | ||
| + | git switch develop | ||
| + | git merge --ff-only origin/ | ||
| + | |||
| + | git fetch --prune | ||
| + | git switch release | ||
| + | git merge --ff-only origin/ | ||
| + | |||
| + | git fetch --prune | ||
| + | git switch master | ||
| + | git merge --ff-only origin/ | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | |||
| + | * mergear , develop en release o release en master (suponiendo que están actualizadas ambas ramas porque las hemos actualizado con las órdenes anteriores) y que no hemos hecho commits directamente ni en release ni en master. | ||
| + | |||
| + | <sxh bash> | ||
| + | git switch release | ||
| + | git merge --ff-only develop | ||
| + | |||
| + | git switch master | ||
| + | git merge --ff-only release | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | |||
| + | * Mergear (rebase) los cambios de origin/ | ||
| + | |||
| + | <sxh bash> | ||
| + | git fetch --prune | ||
| + | git switch develop | ||
| + | git rebase origin/ | ||
| + | </ | ||
| + | |||
| + | Lo normal es hacer el rebase cuando al hacer un '' | ||
| + | |||
| + | ! [rejected] | ||
| + | error: falló el push de algunas referencias a ' | ||
| + | ayuda: Actualizaciones fueron rechazadas porque el remoto contiene trabajo que | ||
| + | ayuda: no existe localmente. Esto es causado usualmente por otro repositorio | ||
| + | ayuda: realizando push a la misma ref. Quizás quiera integrar primero los cambios | ||
| + | ayuda: remotos (ej. 'git pull ...') antes de volver a hacer push. | ||
| + | ayuda: Vea 'Notes about fast-forwards0 en 'git push --help' | ||
| + | |||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | |||
| + | * Merge en develop de nuestra rama de feature **con un solo commit** con '' | ||
| + | |||
| + | |||
| + | <sxh bash> | ||
| + | cd ../ | ||
| + | git merge --squash lorenzo_42 | ||
| + | git commit -am " | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | |||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | |||
| + | * Mergear | ||
| + | |||
| + | <sxh bash> | ||
| + | cd ../ | ||
| + | git merge develop | ||
| + | |||
| + | </ | ||
| + | \\ | ||
| + | \\ | ||
| + | <note tip> | ||
| + | A partir de la versión 2.27 , al hacer un '' | ||
| + | |||
| + | logongas@beren: | ||
| + | ayuda: Hacer un pull sin especificar cómo reconciliar las ramas es poco | ||
| + | ayuda: recomendable. Puedes eliminar este mensaje usando uno de los | ||
| + | ayuda: siguientes comandos antes de tu siguiente pull: | ||
| + | ayuda: | ||
| + | ayuda: | ||
| + | ayuda: | ||
| + | ayuda: | ||
| + | ayuda: | ||
| + | ayuda: Puedes reemplazar "git config" | ||
| + | ayuda: la preferencia en todos los repositorios. Puedes también pasar --rebase, | ||
| + | ayuda: --no-rebase, | ||
| + | ayuda: por defecto en cada invocación. | ||
| + | ayuda: | ||
| + | |||
| + | Es decir que avisa que se configure para saber que hacer en caso de problemas, si con Fast-Forward, | ||
| + | |||
| + | <sxh bash> | ||
| + | git config --global pull.ff only | ||
| + | </ | ||
| + | |||
| + | De esa forma podremos hacer un '' | ||
| + | |||
| + | Mas información: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | Mas información: | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Conflictos | ||
| + | En caso de hacer un '' | ||
| + | |||
| + | Imaginemos el mismo fichero '' | ||
| + | |||
| + | ^ Nuestra Rama | ||
| + | | <sxh html> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Cuando se produce el conflicto, el fichero resultante queda de la siguiente forma: | ||
| + | |||
| + | <sxh Diff> | ||
| + | < | ||
| + | < | ||
| + | <<<<<<< | ||
| + | < | ||
| + | ======= | ||
| + | < | ||
| + | >>>>>>> | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | Ahora tenemos que decidir como resolver el conflicto que el resultado definitivo ya depende del código que estemos fusionando. Un posible resultado podría ser: | ||
| + | |||
| + | <sxh html> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== git rebase rama ==== | ||
| + | Imaginemos que queremos mergear la rama '' | ||
| + | |||
| + | Si hay un conflicto se producirá el siguiente mensaje: | ||
| + | |||
| + | En primer lugar, rebobinando HEAD para después reproducir tus cambios encima de ésta... | ||
| + | Aplicando: feat(# | ||
| + | Usando la información del índice para reconstruir un árbol base... | ||
| + | M index.html | ||
| + | Retrocediendo para parchar base y fusión de 3-vías... | ||
| + | Auto-fusionando index.html | ||
| + | CONFLICTO (contenido): | ||
| + | error: Falló al fusionar en los cambios. | ||
| + | El parche falló en 0001 feat(# | ||
| + | Use 'git am --show-current-patch' | ||
| + | | ||
| + | Resuelva todos los conflictos manualmente ya sea con | ||
| + | "git add/rm < | ||
| + | Si prefieres saltar este parche, ejecuta "git rebase --skip" | ||
| + | Para abortar y regresar al estado previo al "git rebase", | ||
| + | |||
| + | Ahora debemos como antes arreglar el conflicto editando el fichero '' | ||
| + | |||
| + | <sxh bash> | ||
| + | git add index.html | ||
| + | git rebase --continue | ||
| + | </ | ||
| + | | ||
| + | Es decir añadir el fichero que ha dado el conflicto con un '' | ||
| + | |||
| + | El ejemplo completo lo podemos ver aquí: | ||
| + | |||
| + | <sxh bash> | ||
| + | git switch develop | ||
| + | git rebase origin/ | ||
| + | vi index.html | ||
| + | git add index.html | ||
| + | git rebase --continue | ||
| + | </ | ||
| + | \\ | ||
| + | |||
| + | |||
| + | ==== git merge --squash rama ==== | ||
| + | Imaginemos que queremos mergear una rama de una funcionalidad llamada " | ||
| + | |||
| + | |||
| + | Si hay un conflicto se producirá el siguiente mensaje: | ||
| + | |||
| + | Auto-fusionando index.html | ||
| + | CONFLICTO (contenido): | ||
| + | Commit de squash -- no actualizando HEAD | ||
| + | Fusión automática falló; arregle los conflictos y luego realice un commit con el resultado. | ||
| + | |||
| + | Ahora debemos como antes arreglar el conflicto editando el fichero '' | ||
| + | |||
| + | <sxh bash> | ||
| + | git commit -am " | ||
| + | </ | ||
| + | | ||
| + | |||
| + | El ejemplo completo lo podemos ver aqui: | ||
| + | |||
| + | <sxh bash> | ||
| + | cd ../ | ||
| + | git merge --squash Lorenzo_3 | ||
| + | vi index.html | ||
| + | git commit -am " | ||
| + | </ | ||
| + | \\ | ||
| + | |||
| + | |||
| + | |||
| + | ==== git merge --ff-only rama ==== | ||
| + | Con un fast-forward nunca se puede producir un conflicto. | ||
| + | |||
| + | |||
| + | ==== git merge rama ==== | ||
| + | Imaginemos que queremos mergear los cambios de '' | ||
| + | |||
| + | |||
| + | Si hay un conflicto se producirá el siguiente mensaje: | ||
| + | |||
| + | <sxh base> | ||
| + | Auto-fusionando index.html | ||
| + | CONFLICTO (contenido): | ||
| + | Fusión automática falló; arregle los conflictos y luego realice un commit con el resultado. | ||
| + | </ | ||
| + | |||
| + | Ahora debemos como antes arreglar el conflicto editando el fichero '' | ||
| + | |||
| + | |||
| + | <sxh bash> | ||
| + | git add index.html | ||
| + | git merge --continue | ||
| + | </ | ||
| + | | ||
| + | Es decir añadir el fichero que ha dado el conflicto con un '' | ||
| + | |||
| + | |||
| + | |||
| + | El ejemplo completo lo podemos ver aqui: | ||
| + | |||
| + | <sxh bash> | ||
| + | cd ../ | ||
| + | git merge develop | ||
| + | vi index.html | ||
| + | git add index.html | ||
| + | git merge --continue | ||
| + | </ | ||
| + | \\ | ||
| + | |||
| + | |||
| + | ===== Recetas ===== | ||
| + | |||
| + | < | ||
| + | |||
| + | * Bajarse lo último de las 3 ramas. | ||
| + | |||
| + | <sxh bash> | ||
| + | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| + | </ | ||
| + | |||
| + | * Hacer un merge de las 3 ramas | ||
| + | |||
| + | <sxh bash> | ||
| + | git switch release && git merge --ff-only develop && git switch master && git merge --ff-only release && git switch develop | ||
| + | </ | ||
| + | |||
| + | * Subir las 3 ramas | ||
| + | |||
| + | <sxh bash> | ||
| + | git switch master && git push && git switch release && git push && git switch develop && git push | ||
| + | </ | ||
| + | |||
| + | |||
| + | * 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 '' | ||
| + | |||
| + | <sxh bash> | ||
| + | #Día 1:Lunes | ||
| + | # Crear el issue. Tiene número 45 | ||
| + | cd mi-proyecto | ||
| + | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| + | git worktree add -b lorenzo_45 ../ | ||
| + | cd ../ | ||
| + | git push --set-upstream origin lorenzo_45 | ||
| + | git commit -m " | ||
| + | git push | ||
| + | git commit -m " | ||
| + | git push | ||
| + | git commit -m " | ||
| + | git push | ||
| + | |||
| + | #Día 2:Martes | ||
| + | cd ../ | ||
| + | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| + | cd ../ | ||
| + | git merge develop | ||
| + | git commit -m " | ||
| + | git push | ||
| + | git commit -m " | ||
| + | git push | ||
| + | git commit -m " | ||
| + | git push | ||
| + | |||
| + | #Día 3:Miercoles | ||
| + | cd ../ | ||
| + | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| + | cd ../ | ||
| + | git merge develop | ||
| + | git commit -m " | ||
| + | git push | ||
| + | git commit -m " | ||
| + | git push | ||
| + | git commit -m " | ||
| + | git push | ||
| + | |||
| + | |||
| + | #Día 4: Jueves | ||
| + | cd ../ | ||
| + | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| + | cd ../ | ||
| + | git merge develop | ||
| + | git commit -m " | ||
| + | git push | ||
| + | git commit -m " | ||
| + | git push | ||
| + | git commit -m " | ||
| + | git push | ||
| + | |||
| + | |||
| + | #Día 5: Viernes | ||
| + | cd ../ | ||
| + | git fetch --prune && git switch develop && git merge --ff-only origin/ | ||
| + | cd ../ | ||
| + | git merge develop | ||
| + | |||
| + | cd ../ | ||
| + | git merge --squash lorenzo_45 | ||
| + | git commit -am " | ||
| + | git push | ||
| + | #Si falla el push hacer el fetch y rebase | ||
| + | git fetch --prune | ||
| + | git rebase origin/ | ||
| + | git push | ||
| + | |||
| + | git push origin --delete lorenzo_45 | ||
| + | git worktree remove ../ | ||
| + | git branch --delete --force lorenzo_45 | ||
| + | |||
| + | #Cerrar el issue 45 | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== 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 '' | ||
| + | * Usuario A y usuario B: clonad el repositorio cada uno en su carpeta. | ||
| + | |||
| + | ==== 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 ==== | ||
| + | Dos usuarios que modifican ficheros distintos, por lo que el segundo que sube '' | ||
| + | |||
| + | * 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 3 ==== | ||
| + | Dos usuarios que modifican el mismo fichero, por lo que el conflicto aparecerá al hacer el '' | ||
| + | |||
| + | * 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 ==== | ||
| + | Dos usuarios que modifican el mismo fichero, pero ahora el conflicto se resuelve **en la rama de feature** mergeando '' | ||
| + | |||
| + | * 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 A: Baja la última versión de '' | ||
| + | * Usuario A: Baja la última versión de '' | ||
| + | * Usuario A: Mergea en '' | ||
| + | |||
| + | ==== Ejercicio 6 ==== | ||
| + | * Usuario B: Baja la última versión de '' | ||
| + | * Usuario B: Baja la última versión de '' | ||
| + | * Usuario B: Mergea en '' | ||
| + | |||
| + | |||
| + | ==== 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ó en '' | ||
| + | |||
| + | dev/ | ||
| + | ├── mi-proyecto | ||
| + | └── mi-proyecto-wt-A8 | ||
| + | |||
| + | En cada paso se indica entre corchetes en qué carpeta hay que estar. | ||
| + | |||
| + | <note tip>Si en algún momento no sabes en qué carpeta ni en qué rama estás, ejecuta '' | ||
| + | |||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | * Usuario A **['' | ||
| + | |||
| + | ===== Skills ===== | ||
| + | * Para seguir el flujo de trabajo se recomienda el siguiente skills:{{ clase: | ||
