web-dev-qa-db-fra.com

TortoiseMerge peut-il être utilisé comme un outil de difftool avec Windows Git Bash?

Je commence juste à travailler avec Git. Je voudrais utiliser TortoiseMerge comme difftool et mergetool.

Dans mon .gtconfig dans mon répertoire utilisateur personnel, j'ai les sections suivantes. J'ai supprimé les sections utilisateur et couleur pour cette question.

[merge]
    tool = tortoisemerge
[mergetool "tortoisemerge"]
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[diff]
    tool = tortoisemerge
[difftool "tortoisemerge"]
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"

Si je tape tortoisemerge à l'invite Git Bash, il se charge. Il est connu pour être sur le chemin. Mais si je tape la commande j'obtiens l'erreur suivante.

Rich:mygittest (master *)
$ git difftool
error: 'tortoisemerge' can only be used to resolve merges
merge tool candidates: kompare emerge vimdiff
No known merge resolution program available.
external diff died, stopping at readme.txt.
Rich:mygittest (master *)
$ 

Qu'est-ce que je ne comprends pas pour que cela fonctionne? Tortoisemerge est installé avec TortoiseSVN.

42
Rich Shealer

Les paramètres suivants fonctionnent bien pour moi. Cependant, j'utilise TortoiseGit et non pas TortoiseSVN. Notez la différence dans les paramètres pour diff.

[diff]
  tool = tortoisediff
[difftool]
  Prompt = false
[merge]
  tool = tortoisemerge
[mergetool]
  Prompt = false
  keepBackup = false
[difftool "tortoisediff"]
  cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -mine "$REMOTE" -base "$LOCAL"
[mergetool "tortoisemerge"]
  cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"
62
Klas Mellbourn

Pour que les noms de fichiers avec des espaces soient gérés correctement, vous devez changer la dernière ligne de la réponse de @ melbourn en

cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"
6
jwg

Lors de la refonte de la base, je vous recommande fortement de changer $theirs et $mine, car il en va différemment lors de la fusion et de la fusion de refonte. Vérifier ici:

Quelle est la signification précise de "notre" et de "leur" dans git?

Donc, si vous utilisez seulement mergetool pour rebaser comme moi, faites:

[mergetool "tortoisemerge"]
cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$LOCAL" -mine "$REMOTE" -merged "$MERGED"
0
WesternGun

Grande réponse de Klas Mellbourn! Cela m'a fait gagner un temps considérable ... Un des inconvénients est que les nouveaux fichiers Added ou Removed du référentiel ne seront pas affichés pendant l'exécution de la commande difftool. Il n'y a rien pour les comparer! Voici ce que j'ai fait en plus de ceci: .__ (inspiré par le réponse de mon collègue).

  1. Créez un fichier nommé empty.empty dans le répertoire $Home (exécutez start ~ dans votre bash). Et comme son nom l'indique, gardez-le vide.
  2. Créez un autre fichier nommé tortoisediff.sh dans le répertoire $Home/bin avec le contenu suivant

:

#!/bin/sh
# $LOCAL $REMOTE seem to be swapped
# $1 is $LOCAL
# $2 is $REMOTE

difftool='/c/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe'
NULL="/dev/null"
empty="C:/home/empty.empty"

if [ "$1" == "$NULL" ]; then
    echo "Added: " "$2"
    "$difftool" /base:"$empty" /mine:"$2" /readonly:"$empty"
Elif [ "$2" == "$NULL" ]; then
    echo 'Removed: ' "$1"
    "$difftool" /base:"$1" /readonly:"$1" /mine:"$empty"
else
    echo 'Modified' "$2"
    "$difftool" /base:"$1" /basename:"$1" /readonly:"$1" /mine:"$2" /minename:"$2"
fi

# Checkout https://tortoisegit.org/docs/tortoisegitmerge/tme-automation.html for more
  1. Modifiez votre fichier .gitconfig (ligne 11 de la réponse)

    cmd = tortoisediff.sh "$LOCAL" "$REMOTE"

Difftool ferait maintenant référence à tortoisediff.sh au lieu d’ouvrir directement l’application.

  1. Gardez à l'esprit: vous devez exécuter git add . suivi de git difftool --staged au lieu de simplement git difftool.
0
A-patel-guy
[diff]
  tool = tortoisediff
[difftool]
  Prompt = false
[merge]
  tool = tortoisemerge
[mergetool]
  Prompt = false
  keepBackup = false
[difftool "tortoisediff"]
  cmd = \""C:/Users/$USER/Desktop/TortoiseMerge.exe"\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[mergetool "tortoisemerge"]
  cmd = \""C:/Users/$USER/Desktop/TortoiseMerge.exe"\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"

Cela a fonctionné pour moi avec TortoiseMerge 1.6.7 (Portable)

0
smooth_smoothie