Cómo resolver conflictos de forma interactiva (visual) en SourceTree / git

119

Estoy usando (Windows) SourceTree para mi proyecto git. Puedo hacerlo en el símbolo del sistema o en la terminal de Linux.

Pero me pregunto si existe una buena manera de resolver conflictos de forma interactiva y visual. Por ejemplo, si pull detecta conflictos, aparece una herramienta de conflictos basada en GUI (por ejemplo, P4Merge). ¿Es posible?

Siempre estoy resolviendo conflictos manualmente, lo cual es simplemente doloroso.

Este es, por ejemplo, un pullmensaje de git , de SourceTree.

git -c diff.mnemonicprefix=false -c core.quotepath=false pull --no-commit origin master
From W:\repo\
 * branch            master     -> FETCH_HEAD   

Updating 33c07bf..41e0249

error: Your local changes to the following files would be overwritten by merge:
    foo.cpp
    goo.cpp
    goo.hpp
Please, commit your changes or stash them before you can merge.
Aborting    

Completed with errors, see above.
Nullptr
fuente

Respuestas:

135

Desde SourceTree, haga clic en Herramientas-> Opciones. Luego, en la pestaña "General", asegúrese de marcar la casilla para permitir que SourceTree modifique sus archivos de configuración de Git.

Luego cambie a la pestaña "Diff". En la mitad inferior, use el menú desplegable para seleccionar el programa externo que desea usar para hacer las diferencias y la fusión. He instalado KDiff3 y me gusta bastante. Cuando haya terminado, haga clic en Aceptar.

Ahora, cuando hay una fusión, puede ir a Acciones-> Resolver conflictos-> Iniciar herramienta de fusión externa.

gtrig
fuente
4
Intenté esto, pero al final, no veo más allá de su lanzamiento. Veo comparar archivos que se generan, pero eso es todo. No puedo resolver el conflicto. Cambiar esto a la comparación estándar / predeterminada tampoco parece ayudar.
Echiban
1
@echiban Probablemente tenga la licencia estándar para Beyond Compare, que no acepta la fusión de 3 vías. Es necesario para ser un profesional para usarlo como un mergetool GIT
pierdevara
6
Después de seguir todos los pasos para configurar "Launch External Merge Tool" todavía está atenuado para mí, no hay forma de activarlo
pal4life
2
Además, no estaba seleccionando el archivo de conflicto de combinación, una vez que lo hice, salió bien
pal4life
2
Tuve que hacer clic en el elemento "Cambios no confirmados" en la lista de confirmaciones antes de que desapareciera.
Micah Zoltu
11

Estoy usando SourceTree junto con TortoiseMerge / Diff, que es una herramienta de diferenciación / fusión muy fácil y conveniente.

Si también desea usarlo, entonces:

  1. Obtenga la versión independiente de TortoiseMerge / Diff (bastante antigua, ya que no se envía de forma independiente desde la versión 1.6.7 de TortosieSVN, es decir, desde julio de 2011). Enlaces y detalles en esta respuesta .

  2. Descomprimir TortoiseIDiff.exey TortoiseMerge.exeen cualquier carpeta ( c:\Program Files (x86)\Atlassian\SourceTree\extras\en mi caso).

  3. En SourceTree abierto Tools > Options > Diff > External Diff / Merge. Seleccione TortoiseMergeen ambas listas desplegables.

  4. Pulse OKy apunte SourceTree a su ubicación de TortoiseIDiff.exey TortoiseMerge.exe.

Después de eso, puede seleccionar Resolve Conflicts > Launch External Merge Tool del menú contextual en cada archivo en conflicto en su repositorio local. Esto abrirá TortoiseMerge, donde puede lidiar fácilmente con todos los conflictos que tenga. Una vez que haya terminado, simplemente cierre TortoiseMerge (ni siquiera necesita guardar los cambios, esto probablemente se hará automáticamente) y luego de unos segundos SourceTree debería manejar eso con gracia.

El único problema es que crea automáticamente una copia de seguridad, aunque la opción adecuada no está marcada .

trejder
fuente
4

Cuando el menú Resolver conflictos-> Contenido está desactivado, uno puede estar en la lista de archivos pendientes. Necesitamos seleccionar la opción Archivos en conflicto del menú desplegable (arriba)

Espero eso ayude

ozkary
fuente