Pergunta

Eu tentei msysGit e Git no Cygwin. Ambos funcionam muito bem em si e ambos gitk corrida e git-gui perfeitamente.

Agora, como diabos eu configurar um mergetool? (Vimdiff funciona em Cygwin, mas de preferência que eu gostaria de algo um pouco mais user-friendly para alguns dos nossos colegas de trabalho Windows amorosos.)

Foi útil?

Solução

Para o acompanhamento de resposta de Charles Bailey, aqui está a minha configuração git que está usando p4merge (ferramenta 3way merge livre multi-plataforma); testado em msys Git (Windows) instalar:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'

ou, a partir de uma janela shell cmd.exe, a segunda linha passa a ser:

git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""

As mudanças (em relação ao Charles Bailey):

  • adicionado ao git config global, ou seja válida para todos os projetos git não apenas o atual
  • a ferramenta personalizada reside valor de configuração em "mergetool. [Ferramenta] .cmd", não "merge. [Ferramenta] .cmd" (bobo me, passei uma solução de problemas hora porque git continuou reclamando ferramenta não-existente)
  • aspas duplas adicionais para todos os nomes de arquivo para que arquivos com espaços ainda podem ser encontrados pela ferramenta de merge (Eu testei isso em msys Git do PowerShell)
  • Observe que, por padrão Perforce adicionará seu dir instalação para PATH, portanto, não há necessidade de especificar o caminho completo para p4merge no comando

Download: http: //www.perforce. com / produto / componentes / forçosamente-visual-merge-e-diff-ferramentas


EDIT (Fev 2014)

Como apontado por @Gregory Pakosz , mais recente msys git agora "nativamente" suportes p4merge (testado em 1.8.5.2.msysgit.0 ).

Você pode exibir lista de ferramentas suportadas executando:

git mergetool --tool-help

Você deve ver p4merge em qualquer disponível ou válido lista. Se não, por favor, atualize seu git.

Se p4merge foi listado como disponível , que está na sua PATH e você só tem que definir merge.tool :

git config --global merge.tool p4merge

Se ele foi listado como válido , você tem que definir mergetool.p4merge.path , além de merge.tool :

git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
  • A descrição acima é um caminho de exemplo quando p4merge foi instalado para o usuário atual, não em todo o sistema (não precisa de direitos de administrador ou elevação UAC)
  • Embora ~ deve expandir para o diretório home do usuário atual (assim, em teoria, o caminho deve ser ~/AppData/Local/Perforce/p4merge.exe), isso não funcionou para mim
  • Ainda melhor teria sido para tirar proveito de uma variável de ambiente (por exemplo $LOCALAPPDATA/Perforce/p4merge.exe), git não parece estar expandindo variáveis ??de ambiente para caminhos (se você sabe como começar este trabalho, por favor me avise ou atualizar esta resposta)

Outras dicas

ajuste mergetool.p4merge.cmd não vai funcionar mais uma vez que Git começou tentando p4merge apoio, ver libexec / git-core / git-mergetool--lib.so só precisamos especificar o caminho mergetool para git, por exemplo o p4merge:

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge

Em seguida, ele vai funcionar.

Eu estou usando Git portátil em WinXP (funciona um deleite!), E necessário para resolver um conflito que surgiu na ramificação. De todos os gui que verifiquei, KDiff3 provou ser o mais transparente de usar.

Mas eu achei as instruções que eu precisava para fazê-lo funcionar no Windows em este post , instruções que diferem ligeiramente das outras abordagens listadas aqui. Ele basicamente totalizaram adicionando estas linhas ao meu arquivo .gitconfig:

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false

Working bem agora!

De acordo com Cygwin, o única coisa que funcionou para mim é o seguinte:

git config --global merge.tool myp4merge
git config --global mergetool.myp4merge.cmd 'p4merge.exe "$(cygpath -wla $BASE)" "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)" "$(cygpath -wla $MERGED)"'
git config --global diff.tool myp4diff
git config --global difftool.myp4diff.cmd 'p4merge.exe "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)"'

Além disso, eu gostaria de desativar a mensagem de aviso para difftool:

git config --global difftool.prompt false

git mergetool é totalmente configurável, assim você pode muito bem escolher sua ferramenta favorita.

A documentação completa está aqui: http: // www.kernel.org/pub/software/scm/git/docs/git-mergetool.html

Em breve, você pode definir um mergetool padrão definindo o usuário variável de configuração merge.tool.

Se a ferramenta de mesclagem é um dos mais suportado nativamente pelo que você só tem que set mergetool.<tool>.path para o caminho completo para a ferramenta (substitua <tool> por merge.tool que você tenha configurado para ser.

Caso contrário, você pode definir mergetool.<tool>.cmd a um pouco de shell a ser eval'ed em tempo de execução com as variáveis ??do shell $BASE, $LOCAL, $REMOTE, $MERGED definido para os arquivos apropriados. Você tem que ser um pouco cuidadoso com a escapar se você editar diretamente um arquivo de configuração ou definir a variável com o comando git config.

Algo como isso deve dar o sabor do que você pode fazer ( 'mymerge' é uma ferramenta ficcional).

git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'

Uma vez que você configurar sua ferramenta de mesclagem favorito, é simplesmente uma questão de correr git mergetool sempre que você tem conflitos para resolver.

A ferramenta p4merge da Perforce é uma ferramenta muito boa autônomo mesclagem.

Para além de comparação no Windows 7

git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"

Parece que as versões mais recentes do git apoiar p4merge diretamente, assim

git config --global merge.tool p4merge

deve ser tudo que você precisa, se p4merge.exe está no seu caminho. Não há necessidade de configurar cmd ou caminho.

Como já foi respondida aqui (e aqui e < a href = "https://stackoverflow.com/questions/161813/how-do-i-fix-merge-conflicts-in-git"> aqui ), mergetool é o comando para configurar isso. Para uma interface gráfica agradável Eu recomendo kdiff3 (GPL).

Eu tive que largar o adicional citando usando msysGit no Windows 7, não sei porquê.

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'

Se você está fazendo isso através de cygwin, você pode precisar usar cygpath:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge `cygpath -w $BASE` `cygpath -w $LOCAL` `cygpath -w $REMOTE` `cygpath -w $MERGED`'

Bah, este finalmente funcionou para mim (Windows 7 + Cygwin + TortoiseMerge):

Em .git / config:

cmd = TortoiseMerge.exe /base:$(cygpath -d \"$BASE\") /theirs:$(cygpath -d \"$REMOTE\") /mine:$(cygpath -d \"$LOCAL\") /merged:$(cygpath -d \"$MERGED\")

Graças à anterior cartazes para a ponta para uso cygpath!

i usar um aplicativo chamado WinMerge ( http://winmerge.org/ ) informações de seu manual ( http://manual.winmerge.org/CommandLine.html )

Este é o script bash eu uso do mergetool directiva via .gitconfig

#!/bin/sh
# using winmerge with git
# replaces unix style null files with a newly created empty windows temp file

file1=$1
if [ "$file1" == '/dev/null' ] || [ "$file1" == '\\.\nul' ] || [ ! -e "$file1" ]
    then 
       file1="/tmp/gitnull"
       `echo "">$file1`
fi
file2=$2
if [ "$file2" == '/dev/null' ] || [ "$file2" == '\\.\nul' ] || [ ! -e "$file2" ]
    then 
       file2="/tmp/gitnull"
       `echo "">$file2`
fi
echo diff : $1 -- $2
"C:\Program files (x86)\WinMerge\WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$file1" "$file2"

basicamente a festa representa quando o resultado do diff em um arquivo vazio e cria um novo arquivo temporário no local correto.

Eu encontrei duas maneiras de configurar " SourceGear DiffMerge " como difftool e mergetool no github do Windows.

Os seguintes comandos em uma janela do prompt de comando irá atualizar seu .gitconfig para configurar GIT uso DiffMerge:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe  \"$LOCAL\" \"$REMOTE\"'

git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd  'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe  -merge  -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"'

[ ou ]

Adicione as seguintes linhas ao seu .gitconfig. Este arquivo deve estar no seu diretório home em C: \ Users \ UserName:

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"

[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    trustExitCode = true
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"

Você pode querer adicionar essas opções também:

git config --global merge.tool p4mergetool
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
git config --global mergetool.p4mergetool.trustExitCode false
git config --global mergetool.keepBackup false

Além disso, eu não sei por que, mas a citação e barra de Milan Gardian resposta estraguei as coisas para mim.

Se alguém quiser usar gvim como sua ferramenta de comparação on TortoiseGit, então este é o que você precisa para entrar na entrada de texto para o caminho para a ferramenta de comparação externo:

path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"

Para IntelliJ IDEA (Community Edition) 3-way git mergetool configuração em ambiente Windows (~/.gitconfig)

Cygwin

[mergetool "ideamerge"]
     cmd = C:/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe merge `cygpath -wa $LOCAL` `cygpath -wa $REMOTE` `cygpath -wa $BASE` `cygpath -wa $MERGED`
[merge]
     tool = ideamerge

Msys

[mergetool "ideamerge"]
cmd = "/c/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe" merge `~/winpath.sh $LOCAL` `~/winpath.sh $REMOTE` `~/winpath.sh $BASE` `~/winpath.sh $MERGED`
[merge]
 tool = ideamerge

O ~ / winpath.sh é a caminhos Converter para Windows em msys e é retirado msys questão conversão caminho no stackoverflow

#! /bin/sh                                                               

function wpath {                                                         
    if [ -z "$1" ]; then                                                 
        echo "$@"                                                        
    else                                                                 
        if [ -f "$1" ]; then                                             
            local dir=$(dirname "$1")                                    
            local fn=$(basename "$1")                                    
            echo "$(cd "$dir"; echo "$(pwd -W)/$fn")" | sed 's|/|\\|g';  
        else                                                             
            if [ -d "$1" ]; then                                         
                echo "$(cd "$1"; pwd -W)" | sed 's|/|\\|g';              
            else                                                         
                echo "$1" | sed 's|^/\(.\)/|\1:\\|g; s|/|\\|g';          
            fi                                                           
        fi                                                               
    fi                                                                   
}                                                                        

wpath "$@" 

Para p4merge configuração, instalado usando achocolatada no Windows para ambos merge e diff, dê uma olhada aqui: https://gist.github.com/CamW/88e95ea8d9f0786d746a

Se você está tendo problemas para abrir p4merge de SourceTree olhar para você arquivo de configuração local chamado configuração em MyRepo.git e excluir qualquer configuração merge. No meu caso, estava tentando abrir Meld que eu só desinstalado

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