Como resolver interativamente (visualmente) conflitos no SourceTree / git

119

Estou usando o SourceTree (Windows) para o meu projeto git. Eu posso fazer isso no prompt de comando ou no terminal Linux.

Mas, estou me perguntando se existe uma boa maneira de resolver interativamente e visualmente os conflitos. Por exemplo, se pull detecta conflitos, aparece uma ferramenta de conflito baseada em GUI (por exemplo, P4Merge). É possível?

Estou sempre resolvendo conflitos manualmente, o que é apenas doloroso.

Esta é, por exemplo, uma pullmensagem git , do 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
fonte

Respostas:

135

No SourceTree, clique em Ferramentas-> Opções. Em seguida, na guia "Geral", marque a caixa para permitir que o SourceTree modifique seus arquivos de configuração do Git.

Em seguida, mude para a guia "Dif." Na metade inferior, use o menu suspenso para selecionar o programa externo que você deseja usar para fazer as diferenças e mesclar. Instalei o KDiff3 e gostei bastante dele. Quando terminar, clique em OK.

Agora, quando houver uma mesclagem, você poderá ir em Ações-> Resolver conflitos-> Iniciar a ferramenta de mesclagem externa.

gtrig
fonte
4
Eu tentei isso, mas no final, não vejo além da comparação sendo lançada. Vejo comparar arquivos sendo gerados, mas é isso. Não consigo resolver conflitos. Alterar isso para a comparação padrão / padrão também não parece ajudar.
Echiban
1
@echiban Você provavelmente possui a licença padrão do Beyond Compare, que não aceita a fusão de três vias. Você precisa ir pro usá-lo como um mergetool git
pierdevara
6
Depois de seguir todos os passos para configurar "Lançamento Mesclar ferramenta externa" ainda está esmaecido para mim, não há maneira de ativá-lo
pal4life
2
Também eu não estava selecionando o arquivo de conflito de mesclagem, uma vez que fiz isso ele foi muito bem
pal4life
2
Eu tive que clicar no item "Alterações não confirmadas" na lista de confirmação antes de desatualizar.
Micah Zoltu 08/09
11

Estou usando o SourceTree junto com o TortoiseMerge / Diff, que é uma ferramenta de diff / mesclagem muito fácil e conveniente.

Se você quiser usá-lo também, então:

  1. Obtenha a versão autônoma do TortoiseMerge / Diff (bastante antiga, pois não é fornecida autônoma desde a versão 1.6.7 do TortosieSVN, que é desde julho de 2011). Links e detalhes nesta resposta .

  2. Descompacte TortoiseIDiff.exee TortoiseMerge.exepara qualquer pasta ( c:\Program Files (x86)\Atlassian\SourceTree\extras\no meu caso).

  3. No SourceTree, abra Tools > Options > Diff > External Diff / Merge. Selecione TortoiseMergenas duas listas suspensas.

  4. Pressione OKe aponte o SourceTree para a sua localização de TortoiseIDiff.exee TortoiseMerge.exe.

Depois disso, você pode selecionar Resolve Conflicts > Launch External Merge Toolno menu de contexto em cada arquivo em conflito no seu repositório local. Isso abrirá o TortoiseMerge, onde você pode lidar facilmente com todos os conflitos que tiver. Uma vez terminado, basta fechar o TortoiseMerge (você nem precisa salvar as alterações, isso provavelmente será feito automaticamente) e, após alguns segundos, o SourceTree deve lidar com isso normalmente.

O único problema é que ele cria automaticamente uma cópia de backup, mesmo que a opção adequada esteja desmarcada .

trejder
fonte
4

Quando o menu Resolver conflitos -> conteúdo estiver desativado, um poderá estar na lista de arquivos pendentes. Precisamos selecionar a opção Arquivos em conflito no menu suspenso (superior)

espero que ajude

ozkary
fonte