A través del desarrollo de este tutorial pondrá en práctica los conceptos vistos sobre conflictos.
Se espera que al finalizar usted pueda:
El punto de partida es un proyecto web que contiene diferentes recetas de cocina hispanoamericana. Simulará el trabajo de 2 desarrolladores en un repositorio compartido, provocará 2 situaciones de conflicto y las solucionará.
Para realizar este tutorial usted debe tener claras las respuestas a las siguientes preguntas:
Pregunta 1. ¿Qué es un repositorio remoto?
Pregunta 2. ¿Cuál es la diferencia entre un repositorio remoto y un repositorio local?
Pregunta 3. ¿Cuál es la utilidad de un repositorio remoto?
Pregunta 4. ¿Qué sucede al clonar un repositorio?
Pregunta 5. ¿Qué es GitHub?
Pregunta 6. ¿Qué es un conflicto?
Pregunta 7. ¿Por qué se genera un conflicto?
Si no es así, por favor revise los videos y el material propuesto antes de seguir. De esta forma podrá sacarle más provecho.
Esta situación de conflicto se provocará al modificar diferentes partes del mismo archivo y tratar de sincronizar los cambios con el repositorio remoto.
Realice los siguientes pasos:
Note que al terminar la clonación se habrá creado la carpeta del repositorio local (2) en el directorio seleccionado.
Ahora desde el repositorio creado en la primera parte del tutorial (repositorio 1), modifique la misma receta del punto 3 en la línea 33 cambiando Ajiaco
por Ajiaco Santafereno
.
Note que Git ha rechazado el push
al repositorio remoto. Esto se debe a que el mismo archivo fue modificado desde repositorios diferentes y la última versión del repositorio remoto no coincide con la versión anterior del repositorio local.
Para solucionarlo es necesario actualizar el repositorio local y después enviar los cambios al repositorio remoto.
Una vez ejecutado el comando git
pull
, se hace automáticamente una mezcla entre el repositorio local y el repositorio remoto. A este proceso se le conoce como merge
.
El merge
es un commit
dentro del historial de cambios y por esto requiere de un mensaje. Para identificar el por qué fue necesario realizarlo. Guarde los cambios y cierre el editor.
Con lo anterior habrá solucionado el conflicto generado al modificar diferentes partes del mismo archivo. Continúe con el tutorial para aprender a solucionar conflictos generados por modificar la misma parte del mismo archivo.
Esta situación de conflicto se provocará al modificar la misma parte del mismo archivo y tratar de sincronizar los cambios con el repositorio remoto.
Realice los siguientes pasos:
Note que al terminar la clonación se habrá creado la carpeta del repositorio local (2) en el directorio seleccionado.
Modifique la receta Arroz con coco y camarón fresco (Colombia) en la línea 8 cambiando el name
de la imagen por arroz_coco
.
Ahora deberá tener un commit
adicional en el repositorio remoto. Verifíquelo en GitHub
.
Desde el repositorio creado en la primera parte del tutorial (repositorio 1), modifique la misma receta del punto 3 en la línea 8 cambiando el id
de la imagen por Imagen1
.
Note que Git ha rechazado el push
al repositorio remoto. Esto se debe a que existen cambios en él que aún no han sido sincronizados con el repositorio local (1).
Para resolverlo, haga pull
del repositorio remoto.
Como se observa en la imagen anterior, Git ha identificado un conflicto entre la versión del repositorio local (1) y la versión del repositorio remoto, esto se debe a que el mismo archivo fue modificado desde diferentes repositorios (1 y 2).
Abra el archivo que generó el conflicto con su IDE preferido y corrija manualmente.
Las líneas de código que están después de la etiqueta HEAD
corresponden a lo que está en el repositorio local (1) y lo que está después de =====
corresponde a lo que está en el repositorio remoto.
Es su decisión si se queda con lo que está en uno, en el otro o en ambos. Sólo tenga en cuenta eliminar las etiquetas <<<<<<< HEAD
, =======
y >>>>>>>
.
Ya que con eso Git identifica que el conflicto ha sido solucionado.
Note que Git incorpora los cambios al repositorio local 2, muestra los archivos modificados y el número de líneas insertadas o eliminadas.
Es importante recordar que el conflicto anterior se podría haber evitado actualizando el repositorio local 1 antes de realizar los cambios. Esto se considera una buena práctica en cuanto al manejo de repositorios compartidos.