Question

J'essaie d'utiliser Araxis Merge comme outil de différenciation / fusion pour MSYSGit.

J'ai trouvé quelques ressources sur le net:

  • Sur le site Araxis , ils mentionnent un " facile " mais cela implique des exécutables (araxisgitdiff.exe et araxisgitmerge.exe) qui ne font pas partie de ma distribution.
  • J'ai également trouvé des informations dans gitguru , mais les informations concernant Araxis sont rares, au mieux, et je ne peux rien en tirer.
  • Enfin, il y avait des informations sur un ancien stackoverflow post , mais la méthode suggérée ne fonctionne pas pour moi. Cette information particulière était orientée vers OS X. J'ai "traduit" sur Windows de mon mieux, mais sans succès:

J'ai créé /bin/git-diff-driver.sh

#!/bin/sh

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

et édité 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"

et le seul résultat obtenu est:

  

$ git diff HEAD ^ HEAD
  le diff externe est mort, en s'arrêtant à PowerEditor / src / Notepad_plus.cpp.

Modifier:

J'ai également essayé avec l'exe nommé "c: / Program Files / Araxis / Araxis Merge / compare.exe" comme suggéré par l'une des réponses, avec les mêmes résultats.

Modifier:

J’ai trouvé que cela pouvait être facilement réglé si vous utilisiez TortoiseGit, mais il semble gérer différemment les différences, et aucun paramètre de TortoiseGit n’indique comment configurer Araxis en tant qu’outil de fusion lorsque diff est appelé ligne de commande.

Modifier:

La question est donc la suivante: y at-il quelqu'un qui utilise avec succès Araxis Merge pour comparer et fusionner des éléments avec MSYSGit, et si oui, comment vous en sortez-vous?

Était-ce utile?

La solution

Si vous voulez que 'git diff' utilise toujours araxis, vous pouvez utiliser les instructions du fichier d'aide, mais si vous voulez avoir le contrôle, utilisez 'git diff' comme vous le feriez normalement depuis la ligne de commande et 'git difftool 'engager l'interface graphique d'Araxis.

Essayez d’ajouter ce qui suit à votre configuration git ::

[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

Autres conseils

La documentation sur araxis a été mise à jour: http: //www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git

Je peux utiliser la configuration présentée ici sans aucune modification.

Bien ... Je l'ai fait fonctionner avec msysgit version 1.6.3.2.1299.gee46c, sous DOS ou Git Bash, avec une licence d'évaluation pour Araxis Merge 2009, v2009.3713:

L’approche consiste à utiliser le nouveau git difftool et git mergetool , au lieu de diff simple.

Commençons par configurer des scripts pour ces outils de différenciation et de fusion

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

Notes:

  • en définissant diff.external sur le script Git git-difftool - helper , je vais utiliser difftool même si je tape " git diff ".
  • n'oubliez pas de passer $ MERGED à votre script difftool: il s'agit de la seule variable portant le nom réel du fichier en cours de modification. $ LOCAL et $ REMOTE sont des noms temporaires.

Pour l'outil de fusion, définissez les valeurs globales suivantes:

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

En définissant ces outils dans certains scripts shell, vous pourrez changer d’outil à partir de ces scripts.
Une autre approche consiste à nommer vos outils ( mergetool.araxis.cmd , mergetool.winmerge.cmd , ...) et à spécifier le bon outil dans le diff. Paramètre .tool ou merge.tool .

Créez difftool.sh et mergetool.sh dans un répertoire référencé par votre variable d'environnement globale PATH . Ils fonctionneront même à partir de DOS (et ils sont sh - shell - scripts)

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" 

Notes:

  • Impossible d'avoir -title1: "someTitle With Space" ... seul le titre sans espace fonctionne ..., pour le moment, essayez-le sans " titleN 'option.
    Je l'ai! Vous ne pouvez pas transmettre la valeur de titre directement à l'option -title , vous devez la définir comme variable locale, avec "quot". '" combinaisons de citations (les guillemets disparaîtront lors de l'exécution du script shell, laissant les guillemets simples, en laissant des espaces dans un titre!)
  • $ 3 représentent le nom réel et non un nom de fichier temporaire à des fins de différenciation. D'où l'utilisation de $ 3 dans l'option title1 , avec de l'espace.
  • git diff HEAD ^ HEAD ne fonctionnerait pas sous DOS: uniquement git diff "HEAD ^". HEAD serait.

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

Je ne suis pas sûr que ces scripts fonctionnent correctement lorsque plusieurs fichiers sont impliqués (plusieurs diffs, plusieurs fichiers à fusionner).
Je viens juste de le tester: cela fonctionne et Araxis compare.exe ouvre un onglet par fichier pour le différencier ou le fusionner.
Essayez et laissez-nous savoir;)

Je pense que vous devez être un peu plus prudent lorsque vous vous échappez dans votre .gitconfig.

Malheureusement, en raison de la manière dont la variable de configuration est développée et évaluée, votre chaîne doit être une commande shell valide qui est ensuite échappée avec "git config".

Essayez quelque chose comme ça:

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

Oui, pas très jolie, je sais. C’est l’un des cas où utiliser directement git est en réalité plus simple.

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

Je me suis débattu avec ce problème pendant un bon bout de temps, et maintenant je peux enfin dire que tous les hacks suggérés (comme les scripts shell intermédiaires) sont plutôt inutiles = D. Le problème est que toutes les dernières versions de MSYSGit (version 1.6.4) prennent en charge Araxis Merge (version 2008) dès la livraison. Il n’est pas surprenant qu’en interne, on l’appelle "araxis". Donc, tout ce dont vous avez besoin est de définir

[merge]
    tool = araxis

dans votre .gitconfig . Vous devez également inclure le dossier Araxis dans votre variable d’environnement PATH (MSYSGit recherche Compare.exe ).

Pour une bonne mesure, les autres paramètres Git liés à "araxis". mergetool, que vous auriez pu configurer (en particulier, si vous choisissez exactement ce nom, comme certaines personnes sur cette page), devrait être supprimé. Cela inclut tout ce qui se trouve dans la section [mergetool " araxis "]] . Assurez-vous de les supprimer de toutes les configurations (système, globale et référentiel), sinon elles pourraient interférer avec les outils normaux "internes". comportement.

Dans tous les cas, si vous souhaitez savoir comment MSYSGit lancera votre fusion Araxis ou si vous vous demandez quels autres outils de fusion il prend en charge immédiatement, l'emplacement à consulter est \ share \ git-gui \ lib \. mergetool.tcl dans votre dossier d’installation de MSYSGit.

PS. Vous pourriez peut-être éviter de définir la variable d'environnement PATH en configurant mergetool.araxis.path dans .gitconfig . Personnellement, je ne me suis jamais donné la peine de le faire, car

  1. J'utilise quand même Araxis Merge en ligne de commande.
  2. Spécifier le chemin du répertoire dans .gitconfig (en particulier celui comme " C: \ Program Files \ Araxis \ Araxis Merge \ " , qui contient des espaces) peut se révéler difficile à faire correctement, car il est sujet aux problèmes de backslash / forwardwardslash, qui peste MSYSGit.

PPS. Tout ce qui précède s'applique également à faire d'Araxis votre outil de difftool. Ie, vous devez ajouter

[diff]
    tool = araxis

et supprimez tout ce qui se trouve dans la section [difftool "araxis "]] , si vous l'avez dans votre configuration (n'oubliez pas de configurer PATH, cependant).

Vous pouvez essayer de suivre le script mentionné dans ma réponse à propos de diffMerge (pour Windows) et voir si cela fonctionne.

Le chemin de l'exécutable pourrait être mieux exprimé avec:

#!/bin/sh

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

L'une des méthodes que j'ai trouvées pour le faire "simplement". doit installer TortoiseGit et définir les outils de différenciation / fusion dans les options TortoiseGit.
Toutefois, cela ne résout pas le problème si vous souhaitez effectuer une distinction depuis la ligne de commande.

Étant donné que j’ai été piqué par les différences / fusions personnalisées git, j’ai pensé que j’essaierais de résoudre ce problème une fois pour toutes. Je suis arrivé au point où AraxisMerge a commencé, mais sans les titres des onglets. Donc, cela restera comme un exercice pour le lecteur:)

Observations et commentaires:

  • Je n'avais pas AraxisMerge, je l'ai donc téléchargé et j'ai obtenu une licence d'évaluation gratuite de 30 jours pour l'essayer. Cette version (7.0 semble-t-il) vient avec araxisgitdiff.exe, et le lien contenant les instructions que vous envoyez fonctionne. Ce serait donc l’option n ° 1: mettre à niveau la fusion d’araxis.
  • Puisque je travaille depuis CMD.EXE, "git diff HEAD HEAD ^" ne fonctionne pas. Le '^' doit être échappé à 'git diff HEAD "HEAD ^".
  • Pour mon propre travail, j'utilise kdiff3 en remplacement gratuit de Windows, qui fonctionne raisonnablement bien (cela aide par contre de le supporter par git)

En commençant par git-diff-driver.sh, j'ai eu la même erreur. Après avoir modifié le script pour ne contenir que "echo", cela n'a pas changé. Donc, l'erreur est indépendante du contenu du script.

Ensuite, j'ai supprimé la partie "/ bin" de .gitconfig pour que la ligne devienne

external = "git-diff-driver.sh"

... et cela a commencé à fonctionner: la fusion a commencé, mais elle n’échappe pas correctement à la partie "(repo)". En guise de solution de contournement, je l’ai obtenu sans les titres suivants:

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

Bonne chance!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top