¿Cómo usar Xcode 4 mergetool de forma independiente?

A veces tengo que hacer fusiones de git en la consola. Hasta ahora, para resolver conflictos, estaba usando FileMerge de Xcode 3 (puedes abrirlo en la consola usando el comando 'opendiff'). Si aparecen conflictos, uso 'git mergetool' que invoca automáticamente opendiff para cada uno de los archivos en conflicto.

Sin embargo, Xcode 4 presenta un componente de herramienta de combinación mucho mejor para resolver conflictos. Creo que este componente es parte del ejecutable de Xcode 4, en lugar de ser independiente. Le permite obtener una vista previa del archivo fusionado y editar directamente el código fusionado caso por caso, lo que hace que la fusión de conflictos complejos sea increíblemente rápida y satisfactoria.

¿Hay alguna forma de usar la herramienta de combinación Xcode 4 al invocar 'git mergetool' desde la Terminal?

No puedo encontrar un ejecutable para esta herramienta dentro del paquete Xcode 4. Cualquier hack que logre esto será bienvenido.

En caso de que alguien más esté interesado en esta característica: parece que no hay una forma oficial de hacerlo. Envié una solicitud de función a Apple a través de bugreport . Aquí está el radar . Supongo que es bastante inútil, pero nunca se sabe. Para cualquier otra persona interesada, sugiero mostrar interés enviando un informe de error similar a Apple.

Respuestas (3)

opendiff toma dos argumentos de nombre de archivo y un parámetro --ancestor con un tercer nombre de archivo, para producir una diferencia de tres vías, y un parámetro --merge para decir el archivo de salida que se usará para la resolución del conflicto.

Entonces ve:

[mergetool "opendiff"]
    cmd = "opendiff \"$LOCAL\"  \"$REMOTE\" \"$(if test -f \"$BASE\"; then echo \"--ancestor $BASE\"; else echo \"--ancestor $LOCAL\"; fi)\" --merge=\"$MERGED\" "
[merge]
    tool = opendiff

Eso debería hacer que git use opendiff como su herramienta de combinación, cuando hay conflictos de combinación.

Dicho esto, prefiero MUCHO DiffMerge de SourceGear , que es una herramienta gratuita de diferenciación y combinación de tres vías que hace una resolución de conflictos mucho mejor, orientada a palabras. Y en la documentación de DiffMerge hay qué decirle a git para que sea la herramienta de diferenciación y fusión predeterminada.

Gracias por intentar ayudar, pero Filemerge/opendiff no es lo que intento usar. Además, probé DiffMerge (y DeltaWalker por lo que vale) y no me gusta mucho su interfaz de usuario. Kaleidoscope es muchísimo mejor, pero no presenta funciones de fusión/edición, solo muestra la diferencia.
Estoy bastante seguro de que Xcode 4 solo está envolviendo FileMerge. Descubrí la misma decepción sobre Kaleidoscope.
Diría que Xcode 4 no está envolviendo FileMerge. En FileMerge no puede editar el archivo fusionado, simplemente seleccione qué lado de la fusión desea usar para cada conflicto. En el solucionador de conflictos de extracción de Xcode 4, puede editar las líneas en conflicto y hacer una extracción con el archivo de la forma exacta en que desea que sea. Además, la interfaz de usuario es completamente diferente de Filemerge.
Kaleidoscope 2 beta se lanzó recientemente y permite la edición en línea de archivos combinados. Compruébalo, está bastante bien. Lo único que falta es un color diferente para los conflictos (usa el mismo color como sustitución de código para esos).
Después de algunos meses usando Kaleidoscope y, a pesar de que en general es bueno, debo decir que todavía tiene algunos errores y/o es confuso, especialmente cuando se compara con el componente de resolución de conflictos de Xcode 4.x. Todavía espero que Apple haga lo inesperado y lo implemente como una herramienta independiente invocable desde, por ejemplo, Tower. ;-)

Puede editar en el editor de texto (muy básico) dentro de FileMerge abriendo el panel del editor, que está cerrado de forma predeterminada. Para abrir el editor en FileMerge, arrastre el punto debajo de la columna central de diferencias hacia arriba para abrir el panel del editor.

Esto termino funcionando para mi

[merge]
  tool = opendiff

[mergetool]
  keepBackup = false

[mergetool "opendiff"]
  cmd = "opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\""
Opendiff es lo que usaba Xcode 3.x para fusiones. Mi pregunta era sobre el componente de combinación Xcode 4.x, que es una herramienta completamente diferente (permite la edición en línea del archivo resultante, a diferencia de opendiff/filemerge). Gracias de cualquier manera.