Domanda

Sto cercando di utilizzare Araxis Merge come strumento di diff / merge per MSYSGit.

Ho trovato alcune risorse in rete:

  • Sul sito Araxis , menzionano un " easy " ma implica un eseguibile (araxisgitdiff.exe e araxisgitmerge.exe) che non fa parte della mia distro.
  • Ho anche trovato alcune informazioni in gitguru , ma le informazioni reali sono: Araxis è alquanto scarna, e non ho potuto ricavarne nulla.
  • Infine, c'erano alcune informazioni su un vecchio stackoverflow post , ma il metodo suggerito non funziona per me. Quella particolare informazione era orientata verso OS X. I "tradotto" a Windows nel miglior modo possibile, ma senza successo:

Ho creato /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 modificato 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 l'unico risultato che ottengo è:

  

$ git diff HEAD ^ HEAD
  il diff esterno è morto, fermandosi su PowerEditor / src / Notepad_plus.cpp.


Modifica:

Ho anche provato con l'exe chiamato " c: / Program Files / Araxis / Araxis Merge / compare.exe " come suggerito da una delle risposte, con gli stessi risultati.


Modifica:

Ho scoperto che può essere facilmente impostato se si utilizza TortoiseGit, ma sembra gestire diff da solo e nessuna impostazione di TortoiseGit fornisce alcuna indicazione su come configurare Araxis come strumento di unione quando viene invocato diff dal riga di comando.


Modifica:

Quindi, la domanda è: c'è qualcuno che usa con successo Araxis Merge per diffondere e unire elementi con MSYSGit e, in tal caso, come si fa?

È stato utile?

Soluzione

Se vuoi che 'git diff' usi sempre araxis puoi usare le istruzioni nel file di aiuto, ma se vuoi avere il controllo usa 'git diff' come faresti normalmente dalla riga di comando e 'git difftool "per coinvolgere la GUI di Araxis.

Prova ad aggiungere quanto segue a git config ::

[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

Altri suggerimenti

La documentazione di araxis è stata aggiornata: http: //www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git

Posso usare la configurazione mostrata lì senza alcuna modifica.

Giusto ... L'ho fatto funzionare, con msysgit versione 1.6.3.2.1299.gee46c, sotto DOS o Git Bash, con una licenza di valutazione per Araxis Merge 2009, v2009.3713:

L'approccio consiste nell'utilizzare il nuovo git difftool e git mergetool , invece della semplice diff.

Innanzitutto, impostiamo alcuni script per quegli strumenti diff e mer

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

Note:

  • impostando diff.external sullo script Git git-difftool - helper , userò difftool anche quando scriverò ' git diff '.
  • non dimenticare di passare $ MERGED al tuo script difftool: questa è l'unica variabile con il vero nome del file che viene diffuso. $ LOCAL e $ REMOTE sono nomi temporanei.

Per lo strumento di unione, dovresti impostare i seguenti valori globali:

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

Impostando quegli strumenti su alcuni script di shell, sarai in grado di cambiare gli strumenti da quegli script.
Un altro approccio è quello di nominare i tuoi strumenti ( mergetool.araxis.cmd , mergetool.winmerge.cmd , ...) e specificare lo strumento giusto nel diff .tool o merge.tool .

Crea difftool.sh e mergetool.sh in una directory a cui fa riferimento la tua variabile di ambiente globale PATH . Funzioneranno anche da DOS (e sono sh - shell - script)

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" 

Note:

  • Impossibile avere -title1: " someTitle With Space " ... funziona solo il titolo senza spazio ..., quindi per ora provalo senza ' opzione titleN .
    Fatto! Non puoi passare il valore del titolo direttamente all'opzione -title , devi impostarlo su una variabile locale, con " ' '" combinazioni di virgolette (le doppie virgolette scompariranno durante l'esecuzione dello script della shell, lasciando le virgolette semplici, consentendo spazi all'interno di un titolo!)
  • $ 3 rappresentano il vero nome e non un nome di file temporaneo a scopo diff. Da qui l'uso di $ 3 all'interno dell'opzione title1 , con spazio all'interno.
  • git diff HEAD ^ HEAD non funzionerebbe nella sessione DOS: solo git diff " HEAD ^ " HEAD lo farebbe

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

Non sono sicuro che quegli script funzionino correttamente quando sono coinvolti più file (più differenze, più file da unire).
L'ho appena provato: funziona e Araxis compare.exe apre una scheda per file per diff o unire.
Provalo e facci sapere;)

Penso che devi stare un po 'più attento con la tua fuga nel tuo .gitconfig.

Sfortunatamente, a causa del modo in cui la variabile config viene espansa e valutata, la tua stringa deve essere un comando shell valido a cui poi è 'sfuggito' git config '.

Prova qualcosa del genere:

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

Sì, non molto carino, lo so. È uno dei casi in cui l'utilizzo di git config è effettivamente più semplice.

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

Ho lottato con questo problema per un po 'di tempo, e ora finalmente posso dire che tutti gli hack sporchi suggeriti (come gli script di shell intermedi) sono piuttosto inutili = D. Il fatto è che tutte le ultime versioni di MSYSGit (I 1.6.4) supportano Araxis Merge (I 2008) immediatamente. Non sorprende che internamente si chiama "araxis". Quindi, tutto ciò che serve è impostare

[merge]
    tool = araxis

nel tuo .gitconfig . Inoltre, devi includere la cartella Araxis nella variabile di ambiente PATH (MSYSGit cerca Compare.exe ).

Per una buona misura, altre impostazioni Git relative a " araxis " mergetool, che avresti potuto configurare (in particolare, se ti capita di scegliere esattamente quel nome, come hanno fatto alcune persone in questa pagina), dovrebbero essere tutti rimossi. Ciò include tutto nella sezione [mergetool " araxis "] . Assicurati di rimuoverli da tutte le configurazioni (sistema, globale e repository), altrimenti potrebbero interferire con il normale "strumento interno". comportamento.

In ogni caso, se sei interessato a come MSYSGit avvierà Araxis Merge, o ti stai chiedendo quali altri metodi di fusione supporta immediatamente, il posto dove cercare è \ share \ git-gui \ lib \ script mergetool.tcl nella cartella di installazione di MSYSGit.

PS. Potresti essere in grado di evitare di impostare la variabile d'ambiente PATH, configurando mergetool.araxis.path in .gitconfig . Personalmente, non mi sono mai preso la briga di farlo, da

  1. Uso comunque Araxis Merge dalla riga di comando.
  2. Specificare il percorso della directory in .gitconfig (specialmente quello come " C: \ Programmi \ Araxis \ Araxis Merge \ " , che contiene spazi) può provare difficile da eseguire correttamente, poiché è soggetto a problemi di backslash / forwardslash, che affligge MSYSGit.

PPS. Tutto quanto sopra vale per rendere Araxis anche il tuo difftool. Ad esempio, è necessario aggiungere

[diff]
    tool = araxis

e rimuovi qualsiasi altra cosa nella sezione [difftool " araxis "] , se ce l'hai nella tua configurazione (non dimenticare di impostare PATH, però).

Potresti provare a seguire lo script menzionato in la mia risposta su diffMerge (per Windows) e vedere se funziona.

Il percorso eseguibile potrebbe essere meglio espresso con:

#!/bin/sh

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

Un modo in cui ho scoperto di farlo " semplicemente " è installare TortoiseGit e impostare gli strumenti diff / merge nelle opzioni di TortoiseGit.
Tuttavia, questo non risolve il problema se si desidera differire dalla riga di comando.

Dato che sono stato morso a differenze / fusioni git personalizzate, ho pensato di provare a risolverlo una volta per tutte. Sono arrivato al punto in cui AraxisMerge è iniziato, ma senza i titoli delle schede. In modo che sarà lasciato come un esercizio per il lettore :)

Osservazioni e commenti:

  • Non avevo AraxisMerge, quindi l'ho scaricato e ho ottenuto una licenza di valutazione gratuita di 30 giorni per provarlo. Questa versione (sembra 7.0) viene fornita con araxisgitdiff.exe e il collegamento con le istruzioni inviate funziona. Quindi sarebbe l'opzione n. 1: upgrade araxis merge.
  • Dato che sto lavorando da CMD.EXE, 'git diff HEAD HEAD ^' non funziona. È necessario eseguire l'escape di '^' in 'git diff HEAD " HEAD ^ "'.
  • Per il mio lavoro uso kdiff3 come sostituto gratuito su Windows che funziona abbastanza bene (aiuta a supportarlo di default con git)

Iniziare con git-diff-driver.sh mi ha dato lo stesso errore. Dopo aver modificato lo script per contenere solo 'echo', questo non è cambiato. Quindi l'errore è indipendente dal contenuto dello script.

Quindi ho rimosso la parte '/ bin' da .gitconfig, quindi la linea diventa

external = "git-diff-driver.sh"

... e questo ha iniziato a funzionare: ha iniziato la fusione, ma non sfugge correttamente alla parte '(repo)'. Per ovviare al problema, l'ho fatto funzionare senza i titoli con:

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

Buona fortuna!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top