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

8

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

Sin embargo, Xcode 4 presenta un componente mergetool mucho más agradable para resolver conflictos. Creo que este componente es parte del ejecutable 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 manera de usar Xcode 4 mergetool al invocar 'git mergetool' desde la Terminal?

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

Ricardo Sanchez-Saez
fuente
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 un informe de errores . 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.
Ricardo Sanchez-Saez

Respuestas:

4

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

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 fusión, cuando hay conflictos de fusión.

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

Dan Ray
fuente
Gracias por intentar ayudar, pero Filemerge / opendiff no es lo que estoy tratando de usar. Además, probé DiffMerge (y DeltaWalker por lo que vale) y no me gusta mucho su interfaz de usuario. Kaleidoscope es mucho mejor, pero no presenta fusión / edición, solo muestra diferencias.
Ricardo Sanchez-Saez
Estoy bastante seguro de que Xcode 4 solo está envolviendo FileMerge. Descubrí la misma decepción sobre Kaleidoscope.
Dan Ray
Yo diría que Xcode 4 no está envolviendo FileMerge. En FileMerge no puede editar el archivo fusionado, solo seleccione qué lado de la fusión desea usar para cada conflicto. En Xcode 4 pull-conflict resolver puede editar las líneas en conflicto y hacer un pull con el archivo de la manera exacta que desea que sea. Además, la interfaz de usuario es completamente diferente de Filemerge.
Ricardo Sanchez-Saez
1
Kaleidoscope 2 beta se lanzó recientemente y permite la edición en línea de archivos combinados. Compruébalo, es bastante bueno. Lo único que falta es un color diferente para los conflictos (usa el mismo color que la sustitución de código para esos).
Ricardo Sanchez-Saez
Después de algunos meses usando Kaleidoscope y, a pesar de ser generalmente bueno, debo decir que todavía es un poco confuso y / o confuso, especialmente en comparación con el componente de resolución de conflictos Xcode 4.x. Todavía espero que Apple haga lo inesperado y lo implemente como una herramienta independiente invocable desde, por ejemplo, Tower. ;-)
Ricardo Sanchez-Saez
0

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 de diferencia central hacia arriba para abrir el panel del editor.

Austin-Soft.com
fuente
-1

Esto terminó trabajando para mí

[merge]
  tool = opendiff

[mergetool]
  keepBackup = false

[mergetool "opendiff"]
  cmd = "opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\""
macek
fuente
2
Opendiff es lo que Xcode 3.x usó para las fusiones. Mi pregunta fue sobre el componente de fusió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.
Ricardo Sanchez-Saez