Como conflitos com “git mergetool” determinação múltipla sem ter que fechar o editor entre arquivos?

StackOverflow https://stackoverflow.com/questions/585844

  •  06-09-2019
  •  | 
  •  

Pergunta

Eu encontrei git mergetool para ser um utilitário prático para fundir diffs visualmente, mas a forma como eu vou sobre isso parece realmente wonky. Essencialmente, os meus processos olhares como este, quando os conflitos são relatados:

  1. Executar um git mergetool
  2. No prompt, hit Enter para abrir a minha ferramenta diff (Meld ou FileMerge, dependendo de qual computador)
  3. Resolver os conflitos
  4. Salve as alterações
  5. Feche a ferramenta de comparação

Se eu tiver mais de um conflito, enxágüe, repita. Sim, isso é me abrir e fechar o meu visualizador de comparação uma vez para cada conflito na mesclagem. Uma vez que é iniciado a partir da linha de comando, fechá-lo é a única maneira que eu conheço para contar mergetool git que eu tenha resolvido este conflito particular e que ele possa passar para a próxima.

Com certeza há uma maneira melhor, mas eu não tenho idéia. ajuda Li'l, por favor? Este processo parece loucura ineficiente.

Foi útil?

Solução

À primeira vista, não parece possível reutilizar uma sessão ferramenta de comparação externo.

O git-mergetool documentação afirma claramente:

Se a ferramenta de mesclagem personalizada corretamente indica o sucesso de uma resolução merge com o seu código de saída , então a variável de configuração mergetool.<tool>.trustExitCode pode ser definido como verdadeiro.
Caso contrário, git-mergetool solicitará que o usuário para indicar o sucesso da resolução após a ferramenta personalizada foi encerrado.

Assim, o código de saída (ou a validação do usuário após a saída da ferramenta diff ) é necessário, o que implica que o usuário primeiro fechar a ferramenta de comparação externo.

Isso parece um grande incentivo para reduzir o número de conflitos em cada fusão / rebase um tentativas;) (qualquer que seja a ferramenta VCScs usado)

Nota:
Duas outras configurações de ferramentas git diff externo ( " Configurar ferramentas de diff e mesclagem para Git no Windows " e " Configurar SourceGear DiffMerge com Git ") não dão mais esperanças quando ele chegou a não fechar a ferramenta de comparação externo ...

Outras dicas

Se o seu mergetool de suportes escolha abrir arquivos em uma instância existente, você pode especificar o comando em seu git config:

% git config mergetool.whatever_you_want.cmd 'exec /path/to/merge/tool $LOCAL $MERGED $REMOTE'
% git config merge.tool whatever_you_want

git mergetool irá então executar o comando personalizado e então pedir-lhe para saber se o arquivo foi incorporada com sucesso (em vez de olhar para um código de saída).

Um exemplo eu só cortei juntos para vimdiff:

% git config mergetool.persistent.cmd 'gvim --remote-tab-silent "+set buftype=nowrite" "$PWD/$BASE" && sleep 1; gvim --remote-send ":split $PWD/$REMOTE<CR>:set buftype=nowrite<CR>:vertical diffsplit $PWD/$MERGED<CR>:vertical diffsplit $PWD/$LOCAL<CR>:set buftype=nowrite<CR><C-W>l"'

Isso funciona bem o suficiente, eu possa começar a usá-lo eu mesmo!

O problema para mergetool é que ela deliberadamente usa uma interface de linha de comando para iniciar uma sessão de mesclagem e, em seguida, aguarda o comando invocado para retornar para determinar quando a fusão orientada para o utilizador foi concluída.

A maioria das ferramentas de mesclagem não fornecem um mecanismo de linha de comando para iniciar uma sessão de mesclagem em um processo já em execução com uma maneira para determinar quando a resolução foi concluída e se bem sucedido ou não.

É concebível que algumas ferramentas de mesclagem pode fornecer essa funcionalidade através de um comando invólucro separado e algum tipo de IPC, mas seria extremamente específica ferramenta e difícil de implementar no programa mergetool genérico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top