lunes, 27 de noviembre de 2017

Cómo resolver conflictos con Github en Windows

Los conflictos que resultan al unir diferentes cambios hechos sobre una misma línea de código o archivo usualmente ocurren cuando tenemos un grupo numeroso de desarrolladores trabajando sobre un mismo proyecto o cuando queremos fusionar dos diferentes ramas de un repositorio en Git.
Para resolver estos conflictos, debemos elegir cuáles de los cambios realizados serán los que quedarán finalmente en la versión unificada. En el post de hoy mostraré la manera de cómo solucionar problemas de conflictos utilizando la herramienta de consola que viene incorporada con Git.

El primer paso será crear un repositorio de Github, para esto creamos una carpeta llamada merge-conflicts, ejecutamos la consola de git dentro de la carpeta e ingresamos el siguiente comando para inicializar nuestro repositorio local:
git init
Dentro de la carpeta, creamos un archivo de texto llamado HelloWorld.txt con el siguiente contenido:
Hola Mundo desde Github

Esto es una prueba 1
Esto es una prueba 2
Esto es una prueba 3
Esto es una prueba 4
Ejecutamos el comando git status para verificar qué cambios tenemos pendientes. Nuestro archivo HelloWorld.txt estará en la staging area, listo para ser commiteado.
Commiteamos los cambios a nuestro repositorio local con los siguientes comandos:
git add .
git commit -m "Archivo de texto agregado"
Nos cambiamos de rama con el siguiente comando:
git checkout -b branch1
Editamos nuestro archivo de texto con el siguiente contenido:
Hola Mundo desde Github en branch 1

Esto es un test 1
Esto es un test 2
Esto es un test 3
Esto es un test 4
Commiteamos los cambios a nuestro repositorio local pero ahora en el branch1:
git add .
git commit -m "Modificacion de archivo en branch1"
En este punto, si alternamos entre los comandos git checkout branch1 y git checkout master, al abrir el archivo de texto, veremos la versión correspondiente a cada una de las ramas. Este es el punto de partida pues es exactamente el escenario en el que nos encontraríamos al intentar fusionar dos ramas. Como indiqué hace un momento, cada rama tiene su propia versión; ahora supongamos que se nos encarga llevar los cambios del branch1 hacia el master, veamos cómo proceder.
Al ejecutar el comando para fusionar las ramas:
>git merge branch1
Se nos indicará que existen un conflicto que no se pudo resolver de manera automática y necesitaremos de una herramienta para resolver el conflicto pues que nuestro archivo quedará de la siguiente manera:
<<<<<<< HEAD
Hola Mundo desde master
1
2
3
4
5
=======
Hola Mundo desde branch1
6
7
8
9
0
>>>>>>> branch1
Par esto vamos a descargar el programa desde Helix Visual Merge Tool. Una vez instalado el programa, debemos realizar una configuración adicional; el archivo config de nuestra carpeta .git (carpeta oculta) dentro de nuestro repositorio deberá quedar de la siguiente manera:
[core]
 repositoryformatversion = 0
 filemode = false
 bare = false
 logallrefupdates = true
 symlinks = false
 ignorecase = true
[merge]
 tool = p4merge
[mergetool "p4merge"]
 path = C:\\Program Files\\Perforce\\p4merge.exe
[diff]
 tool = p4merge
[difftool "p4merge"]
 path = C:\\Program Files\\Perforce\\p4merge.exe
Ahora debemos ejecutar el siguiente comando:
git mergetool --tool=p4merge
Se desplegará la siguiente ventana en donde podremos realizar la resolución de conflictos.
Una vez guardados los cambios, nuevamente agregamos los cambios en nuestra rama master y hacemos commit.
git add .
git commit -m "Merge con branch1"
Con esto se habrán resuelto los conflictos y tendremos en la rama de master unificados los cambios de la rama branch1. Para mayor detalle del uso de p4m, les dejo el siguiente video:

No hay comentarios.:

Publicar un comentario