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:

  1. Clone el repositorio en un directorio diferente al usado en la parte 1 del tutorial (repositorio 2).

Note que al terminar la clonación se habrá creado la carpeta del repositorio local (2) en el directorio seleccionado.

  1. Ubíquese en el directorio del repositorio (2).

  1. Modifique la receta Arroz con coco y camarón fresco (Colombia) en la línea 14 cambiando el número de personas a 10.
  1. Guarde los cambios en el repositorio local (2).

  1. Actualice el repositorio remoto.

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.

  1. Guarde los cambios en el repositorio local (1).

  1. Actualice el repositorio remoto.

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.

  1. Actualice el repositorio remoto.

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:

  1. Clone el repositorio en un directorio diferente al usado en la primera parte del tutorial (repositorio 2).

Note que al terminar la clonación se habrá creado la carpeta del repositorio local (2) en el directorio seleccionado.

  1. Ubíquese en el directorio del repositorio (2).

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.

  1. Guarde los cambios en el repositorio local (2).

  1. Actualice el repositorio remoto.

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.

  1. Guarde los cambios en el repositorio local (1).

  1. Actualice el repositorio remoto.

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).

  1. Resuelva el conflicto.

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.

  1. Guarde los cambios en el repositorio local (1) y actualice el repositorio remoto.

  1. Actualice repositorio 2.

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.