Pergunta

Eu estou tentando usar Araxis Merge como meu diff ferramenta / merge para msysgit.

Eu encontrei alguns recursos na rede:

  • Na Araxis local , eles mencionam uma maneira "fácil", mas implica uma executáveis ??(araxisgitdiff.exe e araxisgitmerge.exe) que não fazem parte da minha distro.
  • Eu também encontrei algumas informações em gitguru , mas a informação real re: Araxis é escassa na melhor das hipóteses, e eu não poderia fazer qualquer coisa fora do que
  • .
  • Finalmente, houve algumas informações sobre um mais velho stackoverflow pós , mas o método sugerido não funciona para mim. Essa informação em particular foi orientada para OS X. I "traduzido" para o Windows como o melhor que pude, mas sem sucesso:

Eu criei /bin/git-diff-driver.sh

#!/bin/sh

"/c/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"

e editado gitconfig

[merge]
    tool = araxismerge
[mergetool "araxismerge"]
    cmd = "/c/Program Files/Araxis/Araxis Merge/compare.exe" -3 -merge -wait $LOCAL $BASE $REMOTE $MERGED
[diff]
    external = "/bin/git-diff-driver.sh"

e o único resultado que eu vejo é:

$ git diff CABEÇA ^ CABEÇA
diff externo morreu, parando em PowerEditor / src / Notepad_plus.cpp.


Editar:

Eu também tentei com o exe nomeado como "c:/Program Files/Araxis/Araxis Merge/compare.exe" como sugerido por uma das respostas, com os mesmos resultados.


Editar:

Eu descobri que ele pode ser facilmente definido se você usar TortoiseGit, mas parece para lidar com diff por si só e sem configurações de TortoiseGit dá qualquer indicação sobre como configurar Araxis como uma ferramenta de mesclagem quando diff é invocado a partir do linha de comando.


Editar:

Assim, a pergunta é: Existe alguém que usa com sucesso Araxis Merge para diff e coisas fusão com msysgit, e em caso afirmativo, como você it

?
Foi útil?

Solução

Se você quer ter 'git diff' sempre usar Araxis você pode usar as instruções no arquivo de ajuda, mas se você quer ter controle para usar 'git diff', como faria normalmente a partir da linha de comando e 'git difftool 'para envolver o Araxis GUI.

Tente adicionar o seguinte ao seu git configuração ::

[difftool "araxis"]
    path = "/c/Program Files/Araxis/Araxis Merge/compare.exe"
    renames = true
    trustExitCode = true
[diff]
    tool = araxis
    stat = true
[mergetool "araxismergetool"]
    cmd = 'C:\\Program Files\\Araxis\\Araxis Merge\\araxisgitmerge.exe' "$REMOTE" "$BASE" "$PWD/$LOCAL" "$PWD/$MERGED"
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = araxismergetool
    stat = true

Outras dicas

A documentação em Araxis foi atualizado: http: //www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git

Eu posso usar a configuração mostrada lá sem qualquer modificação.

Certo ... Eu tenho que trabalhar, com versão msysgit 1.6.3.2.1299.gee46c, sob DOS ou Git Bash, com uma licença de avaliação para Araxis Merge 2009, v2009.3713:

A abordagem é usar a nova git difftool git mergetool , em vez de diff simples .

Em primeiro lugar, a configuração de deixar alguns scripts para aqueles diff e merge ferramenta

C:\>git config --global diff.tool adifftool
C:\>git config --global diff.external git-difftool--helper
C:\>git config --global difftool.adifftool.cmd "difftool.sh \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
C:\>git config --global difftool.prompt false

Notas:

  • definindo diff.external ao git-difftool--helper roteiro Git, vou usar difftool mesmo quando eu vou escrever 'git diff'.
  • não se esqueça de passar $MERGED ao seu script difftool: essa é a única variável com o nome real do arquivo que está sendo diff'ed. $LOCAL e $REMOTE são nomes temporários.

Para a ferramenta de mesclagem, você deve definir os seguintes valores globais:

C:\>git config --global merge.tool amergetool
C:\>git config --global mergetool.amergetool.cmd "mergetool.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\""
C:\>git config --global mergetool.prompt false

Ao definir essas ferramentas para alguns scripts shell, você será capaz de mudar de ferramentas de dentro desses scripts.
Outra abordagem é nomear suas ferramentas (mergetool.araxis.cmd, mergetool.winmerge.cmd, ...) e para especificar a ferramenta certa no cenário diff.tool ou merge.tool.

Criar difftool.sh e mergetool.sh em um diretório referenciado pelo seu PATH variável de ambiente global. Eles vão trabalhar mesmo a partir de DOS (e eles são sh - shell - roteiros)

difftool.sh

#!/bin/sh
echo Launching Araxis Merge.exe: $3
t1="'$3 (from)'"
t2="'(to)'"
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -nowait -2 -title1:${t1} -title2:${t2} "$1" "$2" 

Notas:

  • impossível ter -title1: "someTitle Com Espaço" ... único título sem espaço funciona ..., então por enquanto, experimentá-lo sem qualquer opção 'titleN'.
    Entendi! Você não pode passar o valor título diretamente para a opção -title, você precisará configurá-lo para uma variável local, com combinações citações "' '" (as aspas duplas vão desaparecer durante a execução de scripts shell, deixando as aspas simples, permitindo espaços dentro de um título!)
  • $3 representar o nome real e não um nome de arquivo temporário para fins de diff. Daí o uso de $3 dentro da opção title1, com espaço nele.
  • git diff HEAD^ HEAD não iria funcionar em sessão DOS:. Única git diff "HEAD^" HEAD faria

mergetool.sh

#!/bin/sh

# Passing the following parameters to mergetool:
#  local base remote merge_result

alocal=$1
base=$2
remote=$3
result=$4

t1="'$4 (current branch)'"
t2="'(common ancestor)'"
t3="'(to be merged)'"

if [ -f $base ]
then
    "C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$base" "$remote" "$result" 
else
    "C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$result" "$remote" "$result" 
fi

Não estou certo I esses scripts fazer o trabalho corretamente quando vários arquivos estão envolvidos (vários diffs, vários arquivos a serem incorporadas).
Apenas testei: ele funciona, e Araxis compare.exe faz guia um aberto por arquivo para diff ou merge
. Dê-lhe uma tentativa e deixe-nos saber;)

Eu acho que você precisa ser um pouco mais cuidadoso com seu escapar em sua .gitconfig.

Infelizmente, devido à forma como a variável de configuração é expandido e evaled, suas necessidades de cadeia para ser um comando shell válido que é depois 'git config' escapou.

Tente algo parecido com isto:

[mergetool "araxismerge"]
    cmd = \"/c/Program Files/Araxis/Araxis Merge/compare.exe\" -3 -merge -wait \"$LOCAL\" \"$BASE\" \"$REMOTE\" \"$MERGED\"

Sim, não muito bonita, eu sei. É um dos casos em que usando git config diretamente é realmente mais fácil.

git config --global mergetool.araxismerge.cmd '"/c/Program Files/Araxis/Araxis Merge/compare.exe" -3 -merge -wait "$LOCAL" "$BASE" "$REMOTE" "$MERGED"'

Eu lutei com este problema por um bom tempo, e agora eu finalmente posso dizer, que todos os hacks sujas sugeridas (como shell scripts intermédios) são bastante desnecessária = D. Coisa é, todas as últimas versões do msysgit (eu tenho 1.6.4) suporte Araxis Merge (tenho 2008) fora da caixa. Ele vem sem surpresa, que, internamente, é chamado de "Araxis". Então, tudo o que você precisa é de set

[merge]
    tool = araxis

no seu .gitconfig. Além disso, você tem que incluir pasta Araxis em sua variável de ambiente PATH (msysgit procura Compare.exe).

Para uma boa medida, outras configurações Git relacionadas com mergetool "Araxis", que você poderia ter configurado (especialmente, se acontecer de você escolher exatamente esse nome, assim como algumas pessoas nesta página), todos devem ser removidos. Isso inclui tudo, ao abrigo da secção [mergetool "araxis"]. Certifique-se de removê-los de todas as configurações (sistema global, e repositório), caso contrário, eles podem interferir com o comportamento normal "ferramenta interna".

Em qualquer caso, se você estiver interessado em como msysgit vai começar a sua Mesclar Araxis, ou se perguntando o que as outras mergetools ele suporta fora da caixa, o lugar para olhar é roteiro \share\git-gui\lib\mergetool.tcl na pasta de instalação msysgit.

PS. Você pode ser capaz de evitar a configuração PATH variável de ambiente, configurando mergetool.araxis.path em .gitconfig. Pessoalmente, eu nunca se preocupou em fazê-lo, uma vez

  1. Eu uso Araxis Merge de linha de comando de qualquer maneira.
  2. Especificar caminho do diretório no .gitconfig (especialmente o como "C:\Program Files\Araxis\Araxis Merge\", que contém espaços) pode provar difícil de ser feito corretamente, uma vez que é propenso a barra invertida / questões forwardslash, que msysgit praga.

PPS. Todos os itens acima se aplica a fazer Araxis seu difftool também. Ou seja, você precisa adicionar

[diff]
    tool = araxis

e remover qualquer outra coisa na seção [difftool "araxis"], se você tê-lo em sua configuração (não se esqueça de configurar o PATH, embora).

Você poderia tentar seguir o mencionado no a minha resposta sobre DiffMerge (para Windows) e ver se funciona.

O caminho executável poderia ser melhor expressa com:

#!/bin/sh

"C:/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5"

Uma maneira que eu encontrei para fazer isso "simplesmente" é instalar TortoiseGit e conjunto o diff / ferramentas de intercalação no opções TortoiseGit.
No entanto, isso não resolve o problema, se você quiser diff a partir da linha de comando.

Desde que eu fui mordido para personalizadas git difere / fusões, eu pensei que eu iria tentar corrigir esta para uma vez por todas. Cheguei ao ponto onde AraxisMerge começou, mas sem os títulos das guias. Assim que será deixado como um exercício para o leitor:)

As observações e comentários:

  • Não tive AraxisMerge, então eu baixei e tem um 30 dias de licença de avaliação gratuita para testá-lo com. Esta versão (7.0 parece) vem com araxisgitdiff.exe, eo link com instruções de enviar trabalhos. De modo que seria a opção # 1:. Atualização Araxis Merge
  • Desde que eu estou trabalhando a partir de CMD.EXE, 'git diff CABEÇA CABEÇA ^' não funciona. As necessidades '^' a ser escapou para 'CABEÇA git diff "CABEÇA ^"'.
  • Para minha própria kdiff3 trabalho eu uso como um substituto livre em Windows, que funciona razoavelmente bem (que ajuda que ele é suportado por padrão pelo git)

A partir da git-diff-driver.sh deu o mesmo erro para mim. Depois de mudar o script para conter apenas 'eco', isso não mudou. Então, o erro é independente do conteúdo do script.

Então eu removi a parte '/ bin' de .gitconfig, para que a linha se torna

external = "git-diff-driver.sh"

... e este começou a trabalhar: ele começou a fusão, mas não escapar da '(repo)' parte corretamente. Como solução Eu tenho que trabalhar sem os títulos com:

#!/bin/sh
"/c/Program Files/Araxis/Araxis Merge/compare.exe" -max "$2" "$5"

Boa sorte!

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