Como faço para configurar e usar o Meld como meu diffitol git?
O git difftool exibe o diff usando um programa diff da GUI (por exemplo, Meld) em vez de exibir a saída do diff no seu terminal.
Embora você possa definir o programa GUI na linha de comando -t <tool> / --tool=<tool>
, faz mais sentido configurá-lo em seu .gitconfig
arquivo. [Nota: Veja as seções sobre como escapar aspas e caminhos do Windows na parte inferior.]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[Nota: essas configurações não alterarão o comportamento das git diff
quais continuarão funcionando normalmente.]
Você usa git difftool
exatamente da mesma maneira que você usa git diff
. por exemplo
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
Se configurada corretamente, uma janela Meld será aberta, exibindo o diff usando uma interface GUI.
A ordem dos painéis da janela da GUI do Meld pode ser controlada pela ordem de $LOCAL
e $REMOTE
para cmd
, ou seja, qual arquivo é mostrado no painel esquerdo e qual no painel direito. Se você quiser o contrário, troque-o assim:
cmd = meld "$REMOTE" "$LOCAL"
Finalmente, a prompt = false
linha simplesmente impede que o git indique se você deseja iniciar o Meld ou não, por padrão, o git emitirá um prompt.
Como configuro e uso o Meld como meu git mergetool?
O git mergetool permite que você use um programa de mesclagem da GUI (por exemplo, Meld) para resolver os conflitos de mesclagem que ocorreram durante uma mesclagem.
Como o difftool, você pode definir o programa GUI na linha de comando usando -t <tool> / --tool=<tool>
, mas, como antes, faz mais sentido configurá-lo em seu .gitconfig
arquivo. [Nota: Veja as seções sobre como escapar aspas e caminhos do Windows na parte inferior.]
# Add the following to your .gitconfig file.
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
Você NÃO usa git mergetool
para executar uma mesclagem real. Antes de usar, git mergetool
você faz uma mesclagem da maneira usual com o git. por exemplo
git checkout master
git merge branch_name
Se houver um conflito de mesclagem, o git exibirá algo como isto:
$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.
Neste ponto file_name
, o arquivo será parcialmente mesclado com as informações de conflito de mesclagem (esse é o arquivo com todas as entradas >>>>>>>
e <<<<<<<
).
Agora, o Mergetool pode ser usado para resolver os conflitos de mesclagem. Você o inicia muito facilmente com:
git mergetool
Se configurada corretamente, uma janela Meld será aberta, exibindo 3 arquivos. Cada arquivo estará contido em um painel separado de sua interface GUI.
Na .gitconfig
entrada de exemplo acima, 2 linhas são sugeridas como a [mergetool "meld"]
cmd
linha. De fato, existem todos os tipos de maneiras para os usuários avançados configurarem a cmd
linha, mas isso está além do escopo desta resposta.
Essa resposta tem duas cmd
linhas alternativas que, entre elas, atenderão à maioria dos usuários e serão um bom ponto de partida para usuários avançados que desejam levar a ferramenta ao próximo nível de complexidade.
Primeiro, aqui está o que os parâmetros significam:
$LOCAL
é o arquivo na ramificação atual (por exemplo, mestre).
$REMOTE
é o arquivo no ramo que está sendo mesclado (por exemplo, branch_name).
$MERGED
é o arquivo parcialmente mesclado com as informações de conflito de mesclagem.
$BASE
é o ancestral de consolidação compartilhado de $LOCAL
e $REMOTE
, ou seja, o arquivo como era quando o ramo que continha $REMOTE
foi criado originalmente.
Eu sugiro que você use:
[mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
ou:
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
A escolha é usar $MERGED
ou $BASE
entre $LOCAL
e $REMOTE
.
De qualquer maneira Meld irá exibir 3 painéis com $LOCAL
e $REMOTE
nos painéis esquerdo e direito e, ou $MERGED
ou $BASE
no painel central.
Nos dois casos, o painel do meio é o arquivo que você deve editar para resolver os conflitos de mesclagem. A diferença é exatamente em qual posição de edição inicial você prefere; $MERGED
para o arquivo que contém o arquivo parcialmente mesclado com as informações de conflito de mesclagem ou $BASE
para o ancestral de confirmação compartilhado de $LOCAL
e $REMOTE
. [Como as duas cmd
linhas podem ser úteis, mantenho as duas no meu .gitconfig
arquivo. Na maioria das vezes, uso a $MERGED
linha e a $BASE
linha é comentada, mas o comentário pode ser trocado se eu quiser usar a $BASE
linha.]
Nota No Arquivo de saída: não se preocupe que --output "$MERGED"
é usado na cmd
independentemente de se $MERGED
ou $BASE
foi utilizado no início da cmd
linha. A --output
opção simplesmente informa ao Meld em que nome do arquivo git deseja que o arquivo de resolução de conflitos seja salvo. O Meld salvará as edições de conflito nesse arquivo, independentemente de você usar $MERGED
ou $BASE
como seu ponto de edição inicial.
Após editar o painel do meio para resolver os conflitos de mesclagem, salve o arquivo e feche a janela Meld. O Git fará a atualização automaticamente e o arquivo na ramificação atual (por exemplo, mestre) agora conterá o que você acabou no painel do meio.
O git fará um backup do arquivo parcialmente mesclado com as informações de conflito de mesclagem anexando .orig
ao nome do arquivo original. por exemplo file_name.orig
. Depois de verificar se você está satisfeito com a mesclagem e executar os testes que desejar, o .orig
arquivo pode ser excluído.
Neste ponto, agora você pode fazer uma confirmação para confirmar as alterações.
Se, enquanto estiver editando os conflitos de mesclagem no Meld, você deseja abandonar o uso do Meld, saia do Meld sem salvar o arquivo de resolução da mesclagem no painel do meio. O git responderá com a mensagem file_name seems unchanged
e perguntará Was the merge successful? [y/n]
, se você responder n
, a resolução do conflito de mesclagem será abortada e o arquivo permanecerá inalterado. Observe que se você salvou o arquivo no Meld a qualquer momento, não receberá o aviso nem o prompt do git. [É claro que você pode simplesmente excluir o arquivo e substituí-lo pelo .orig
arquivo de backup que o git criou para você.]
Se você tiver mais de um arquivo com conflitos de mesclagem, o git abrirá uma nova janela Meld para cada um, um após o outro até que tudo esteja pronto. Eles não serão todos abertos ao mesmo tempo, mas quando você terminar de editar os conflitos em um e fechar o Meld, o git abrirá o próximo e assim sucessivamente, até que todos os conflitos de mesclagem sejam resolvidos.
Seria sensato criar um projeto fictício para testar o uso git mergetool
antes de usá-lo em um projeto ao vivo . Certifique-se de usar um nome de arquivo que contenha um espaço em seu teste, caso seu sistema operacional exija que você escape das aspas na cmd
linha, veja abaixo.
Escapando caracteres de aspas
Alguns sistemas operacionais podem precisar ter as aspas em cmd
escape. Usuários menos experientes devem lembrar que as linhas de comando de configuração devem ser testadas com nomes de arquivos que incluem espaços e, se as cmd
linhas não funcionarem com os nomes de arquivos que incluem espaços, tente escapar das aspas. por exemplo
cmd = meld \"$LOCAL\" \"$REMOTE\"
Em alguns casos, pode ser necessário um escape de cotação mais complexo. O primeiro dos links de caminho do Windows abaixo contém um exemplo de escape triplo de cada citação. É um tédio, mas às vezes necessário. por exemplo
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Caminhos do Windows
Os usuários do Windows provavelmente precisarão de uma configuração extra adicionada às cmd
linhas Meld . Eles podem precisar usar o caminho completo para meldc
, projetado para ser chamado no Windows a partir da linha de comando, ou podem precisar ou querer usar um wrapper. Eles devem ler as páginas StackOverflow vinculadas abaixo, sobre como definir a cmd
linha Meld correta para Windows. Como sou usuário de Linux, não consigo testar as várias cmd
linhas do Windows e não tenho mais informações sobre o assunto além de recomendar usar meus exemplos com a adição de um caminho completo para o Meld ou meldc
, ou adicionar a pasta do programa Meld ao seu path
.
Ignorando o espaço em branco à direita com Meld
O Meld possui várias preferências que podem ser configuradas na GUI.
Na Text Filters
guia preferências, existem vários filtros úteis para ignorar coisas como comentários ao executar uma comparação. Embora existam filtros para ignorar All whitespace
e Leading whitespace
, não haja Trailing whitespace
filtro para ignorar (isso foi sugerido como uma adição na lista de discussão Meld, mas não está disponível na minha versão).
Ignorar o espaço em branco à direita geralmente é muito útil, especialmente ao colaborar, e pode ser adicionado manualmente facilmente com uma simples expressão regular na Text Filters
guia Preferências do Meld .
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
Eu espero que isso ajude a todos.