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.
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"
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"
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"
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).
empty.empty
dans le répertoire $Home
(exécutez start ~
dans votre bash). Et comme son nom l'indique, gardez-le vide.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
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.
git add .
suivi de git difftool --staged
au lieu de simplement git difftool
.[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)