Como usar o Xcode 4 mergetool de maneira independente?

8

Às vezes, tenho que fazer o git mesclar no console. Até agora, para resolver conflitos, eu estava usando o FileMerge do Xcode 3 (você pode abri-lo no console usando o comando 'opendiff'). Se os conflitos aparecerem, eu uso 'git mergetool', que invoca automaticamente o opendiff para cada um dos arquivos conflitantes.

No entanto, o Xcode 4 apresenta um componente de ferramenta de fusão muito mais agradável para resolver conflitos. Acredito que esse componente faça parte do executável do Xcode 4, em vez de autônomo. Ele permite que você visualize o arquivo mesclado e edite diretamente o código mesclado caso a caso, o que torna a fusão de conflitos complexos incrivelmente rápida e satisfatória.

Existe alguma maneira de usar o mergcodeol do Xcode 4 ao chamar 'git mergetool' no Terminal?

Não consigo encontrar um executável para esta ferramenta dentro do pacote Xcode 4. Qualquer invasão que conseguir isso seria bem-vinda.

Ricardo Sanchez-Saez
fonte
Caso alguém mais esteja interessado nesse recurso: parece que não há uma maneira oficial de fazê-lo. Enviei uma solicitação de recurso para a Apple através do relatório de erros . Aqui está o radar . Eu acho que é completamente inútil, mas você nunca sabe. Para qualquer pessoa interessada, sugiro mostrar interesse enviando um relatório de bug semelhante à Apple.
Ricardo Sanchez-Saez

Respostas:

4

O opendiff usa dois argumentos de nome de arquivo e um parâmetro --ancestor com um terceiro nome de arquivo, para produzir um diff de três vias e um parâmetro --merge para dizer o arquivo de saída a ser usado na resolução de conflitos.

Entao vai:

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

Isso deve fazer com que o git use o opendiff como sua ferramenta de mesclagem, quando houver conflitos de mesclagem.

Dito isso, eu prefiro o DiffMerge do SourceGear , que é uma ferramenta gratuita de comparação e combinação de três vias que oferece uma resolução de conflitos muito melhor orientada a palavras. E na documentação do DiffMerge há o que dizer ao git para torná-lo a ferramenta de difusão e mesclagem padrão.

Dan Ray
fonte
Obrigado por tentar ajudar, mas o Filemerge / opendiff não é o que estou tentando usar. Além disso, tentei o DiffMerge (e o DeltaWalker pelo que vale a pena) e não gosto muito da interface do usuário. O caleidoscópio é muito melhor, mas não possui mesclagem / edição, apenas mostrando diferenças.
Ricardo Sanchez-Saez
Tenho certeza que o Xcode 4 está apenas envolvendo o FileMerge. Eu descobri a mesma decepção sobre o caleidoscópio.
Dan Ray
Eu diria que o Xcode 4 não está envolvendo o FileMerge. No FileMerge, você não pode editar o arquivo mesclado, basta selecionar o lado da mesclagem que deseja usar para cada conflito. No resolvedor de conflitos de pull do Xcode 4, você pode editar as linhas conflitantes e executar um pull com o arquivo da maneira exata que deseja. Além disso, a interface do usuário é completamente diferente do Filemerge.
Ricardo Sanchez-Saez
1
O Kaleidoscope 2 beta foi lançado recentemente e permite a edição em linha de arquivos mesclados. Confira, é muito bom. A única coisa que falta é uma cor diferente para os conflitos (ela usa a mesma cor que a substituição do código).
Ricardo Sanchez-Saez
Depois de alguns meses usando o Kaleidoscope e apesar de geralmente ser bom, devo dizer que ainda é meio problemático e / ou confuso, especialmente quando comparado ao componente de resolução de conflitos do Xcode 4.x. Ainda esperando que a Apple faça o inesperado e o implemente como uma ferramenta autônoma invocável da Tower. ;-)
Ricardo Sanchez-Saez
0

Você pode editar no (muito básico) editor de texto no FileMerge, abrindo o painel do editor - que é fechado por padrão. Para abrir o editor no FileMerge, arraste o ponto abaixo da coluna de diferenças centrais para cima para abrir o painel do editor.

Austin-Soft.com
fonte
-1

Isso acabou funcionando para mim

[merge]
  tool = opendiff

[mergetool]
  keepBackup = false

[mergetool "opendiff"]
  cmd = "opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\""
macek
fonte
2
Opendiff é o que o Xcode 3.x usou para mesclagens. Minha pergunta era sobre o componente de mesclagem do Xcode 4.x, que é uma ferramenta completamente diferente (permite a edição embutida do arquivo resultante, diferentemente do opendiff / filemerge). Obrigado mesmo assim.
Ricardo Sanchez-Saez