web-dev-qa-db-ja.com

TortoiseMergeはWindows Git Bashのdifftoolとして使用できますか?

私はGitを使い始めたばかりです。 TortoiseMergeをdifftoolおよび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\"

Git Bashプロンプトでtortoisemergeと入力すると、ロードされます。パス上にあることが知られています。しかし、コマンドを入力すると、次のエラーが表示されます。

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とともにインストールされます。

46
Rich Shealer

次の設定は私にとってはうまく機能します。ただし、TortoiseSVNではなくTortoiseGitを使用しています。 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"
64
Klas Mellbourn

スペースを含むファイル名が正しく処理されるように、@ melbournの答えの最後の行を

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

リベースするときは、スイッチ$theirsおよび$mine。これは、マージするときとリベースマージするときに異なるためです。ここで確認してください:

gitでの「私たち」と「彼ら」の正確な意味は何ですか?

したがって、mergetoolのみを使用して私のようにリベースする場合は、次のようにします。

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

Klas Mellbournのすばらしい回答です!時間を大幅に節約できました。 1つの欠点は、リポジトリ内のAddedまたはRemovedファイルが、difftoolコマンドの実行中に表示されないことです。それらを比較するものは何もありません!これに基づいて私がしたことは次のとおりです(同僚の answer に触発された)。

  1. empty.emptyディレクトリに$Homeという名前のファイルを作成します(bashでstart ~を実行します)。名前が示すように、空のままにしてください。
  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を実行する必要があります。
0
ThePatelGuy
[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)を使用して、これはうまくいきました

0
smooth_smoothie