Подтвердить что ты не робот

Может ли TortoiseMerge использоваться как diffftool с Windows Git Bash?

Я только начинаю работать с Git. Я хотел бы использовать TortoiseMerge как diffftool и mergetool.

В моем .gtconfig в моем личном каталоге пользователя у меня есть следующие разделы. Я удалил пользовательские и цветовые разделы для этого вопроса.

[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\"

Если я нахожу tortoisemerge в приглашении Git Bash, он загружается. Он, как известно, находится на пути. Но если я наберу команду, я получаю следующую ошибку.

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 *)
$ 

Что я не понимаю, чтобы сделать эту работу? Tortoisemerge установлен с TortoiseSVN.

4b9b3361

Ответ 1

Следующие настройки работают отлично для меня. Тем не менее, я использую TortoiseGit, а не TortoiseSVN. Обратите внимание на разницу в параметрах для 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"

Ответ 2

Чтобы имена файлов с пробелами обрабатывались правильно, вы должны изменить последнюю строку ответа @melbourn на

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

Ответ 3

Отличный ответ от Klas Mellbourn! Сэкономил мне много времени. Одним из недостатков является то, что Added или Removed файлы в хранилище не будут отображаться во время выполнения команды difftool. Там не с чем их сравнить! Вот что я сделал поверх этого: (вдохновленный ответом моего коллеги).

  1. Создайте файл с именем empty.empty в empty.empty $Home (выполните start ~ в вашем bash). И как следует из названия, держите его пустым.
  2. Создайте еще один файл с именем tortoisediff.sh в каталоге $Home/bin со следующим содержимым

:

#!/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. Измените ваш файл .gitconfig (строка 11 ответа)

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

Это теперь заставит difftool обращаться к tortoisediff.sh вместо непосредственного открытия приложения.

  1. Имейте в виду: вам нужно запустить git add. затем следует git difftool --staged вместо простого git difftool.

Ответ 4

[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\"

Это сработало для меня, используя TortoiseMerge 1.6.7 (Portable)