61

以前にWindows7Ultimateで他の人が行ったのと同じように、WinMergeをGitと統合しようとしています。

次の手順を実行しましたが、デフォルトでvimdiffに設定されているgit mergetoolを実行すると、エラーが引き続き表示されます。

gitのルートディレクトリにwinmerge.shというファイルを作成しました:C / Program Files(x86)/ Git / with:WinMergeUは正しい場所です。

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files (x86)/WinMerge/WinMergeU.exe" 
git /e /u /dl "Base" /dr "Mine" "$1" "$2"

次のコマンドを使用しました。

git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

エラーは次のように表示されます。

git config option merge.tool set to unknown tool: winmerge
4

14 に答える 14

70

あなたはマージ ツールについて話していますが、あなた (および回答のある他の人) はそれをdiff ツールとして構成しています。

マージ ツールを構成するには、次のようにandの代わりにmerge.tooland構成を使用する必要があります。mergetooldiff.tooldifftool

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false

そして、あなたは使用することができます

git mergetool

編集する 2 つのファイルが開きます。

@dvdvck のコメントで、コマンド ライン パラメーターで winmerge の結果ファイル (outputpath パラメーター) の 3 番目のファイルを指定できることを言及したことを称賛します。

完全を期すために、差分ツールとマージ ツールの両方で winmerge を完全に構成することを目的としたこの要点もあることに言及します。

于 2013-05-01T23:04:17.143 に答える
39

SourceTree を使用する場合 (または SourceTree を使用する Google サーチャーの場合)、マージ ツールをカスタムに設定し、Diff コマンドを WinMergeU.exe に指定することで、マージ ツールに WinMerge を使用できます。

C:\Program Files (x86)\WinMerge\WinMergeU.exe

引数で次を使用します。

-e -u -dl "Mine" -wr -dr "Theirs" $LOCAL $REMOTE $MERGED

これにより、左側 (「Mine」というラベルが付いている) が編集可能になり、WinMerge で保存すると出力ファイルになります。右側 ("Theirs" というラベル) は読み取り専用 (-wr 引数) になります。これは、WinMerge が保存されたすべてのファイルを $MERGED ファイルに出力するために必要です。したがって、両側が編集された場合、左側が出力されます。それを右側で上書きします。そのような混乱を避けるのが最善です。

バックアップ ファイル オプションをオンのままにしておくと、WinMerge は .bak ファイルを生成します。このファイルの内容は、元の左側のファイル、または複数回保存した場合は最後から 2 番目の出力ファイルのいずれかになります。これをオフにするか、*.bak を .gitignore ファイルに追加することができます。

Git 自体は、コンフリクトが解決された後に *.orig コンフリクト ファイルを作成します。繰り返しますが、*.orig を .gitignore ファイルに追加するか、この機能をオフにすることができます。残念ながら、SourceTree にはこのための GUI オプションがないため、git bash を起動するか、インストール時に適切な PATH オプションを選択した場合は、Windows コマンド プロンプトを起動して、次のようにします。

git config --global mergetool.keepBackup false

これにより、Git による *.orig ファイルの作成が停止します。ユーザー ディレクトリのルートに .gitconfig ファイルを配置して、構成ファイルを直接編集することもできます。VIM の使用方法を知っている場合は、次のコマンドですべてを編集できます。

git config --global --edit
于 2014-07-11T16:51:10.380 に答える
34

Git 2.5+ (2015 年第 2 四半期) には、既知のgit mergetool!

Winmerge が にある場合は、必要なのは%PATH%agit config merge.tool winmergeだけです!
(差分ツールでも機能しますgit config diff.tool winmerge:)

20155月20David Aguilar ( )によるコミット3e4f237参照て ください_ _ SZEDER ガボール ( )davvid
gitster
PhilipOakleydschosschuberthszeder

すべての構成は、Git 自体で直接行われるようになりましたmergetools/winmerge

  • 差分コマンド:"$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
  • マージ コマンド:"$merge_tool_path" -u -e -dl Local -dr Remote "$LOCAL" "$REMOTE" "$MERGED"

mergetools: 組み込みツールとして winmerge を追加

このスレッドで説明されているコマンドを含む winmerge スクリプトレットを追加して、ユーザーが追加の構成を実行する必要なく winmerge を使用できるようにします。

于 2015-06-07T22:46:21.247 に答える
15

これが私のものです(%userprofile%\.gitconfigまたは~/.gitconfig* nixで)、ラッパーはありません(Win 7 Home Pro):

[diff]
    tool = winmerge
[difftool "winmerge"]
    cmd = c:/path/to/winmergeu.exe -e -u -x -wl -wr -dl "base" -dr "mine" \"$LOCAL\" \"$REMOTE\"
于 2012-05-23T05:56:25.923 に答える
7

これは簡単で、私にとってはうまくいきました:

git config --global diff.tool winmerge

git config --replace --global difftool.winmerge.cmd "\"C:\path to winmerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE"

git config --global difftool.prompt false
于 2013-05-01T02:21:49.040 に答える
4

あなたのパスは正しくありません"/c/Program Files (x86)/WinMerge/WinMergeU.exe"

ネイティブの Windows コマンド プロンプトではなく、シェル スクリプト環境で実行しています。

于 2012-05-23T05:41:20.680 に答える
2

コマンドラインから設定を入力することは、他の回答でカバーされています。WinMerge を使用した完全な 3 ウェイ マージ用の.gitconfigファイルは、次のように構成できます (この例は Windows のものです)。

[merge]
    tool = WinMerge

[mergetool "WinMerge"]
    cmd = \"C:\\Program Files\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Local\" -dm \"Base\" -dr \"Remote\" \"$LOCAL\" \"$BASE\" \"$REMOTE\" -o \"$MERGED\"
    trustExitCode = true
    keepBackup = false

[diff]
    tool = WinMerge

[difftool "WinMerge"]
    cmd = \"C:\\Program Files\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Old $BASE\" -dr \"New $BASE\" \"$LOCAL\" \"$REMOTE\"
    trustExitCode = true

フラグ情報:

  • /e - 「esc」キーを 1 回押すだけで WinMerge を閉じることができます。
  • /u - WinMerge が最近使用したリストにファイルを記録しないようにします。
  • /dl、/dm、および /dl - 左ペイン、中央ペイン、および右ペインの説明。
  • /o - 出力ファイル。ANYペインを保存すると、そのペインの内容が出力ファイルに出力されます。

trustExitCode = true追加のプロンプトなしで出力を受け入れるように git に指示します。

keepBackup = false自動生成されたファイルを自動的に削除し*.origます。

注: difftool を使用する場合の $BASE および $MERGE 変数には、どちらもファイル名が含まれているだけです。

于 2019-03-05T18:04:30.903 に答える
1

これに1時間以上苦労した後、tortoisegitをインストールしましたが、これまでのところ、まさに私が望むものを提供しています.

Tortoise git の Winmerge の設定については、http: //thoai-nguyen.blogspot.com.au/2012/03/setup-tortoise-git-and-winmerge.html に記載されています。

于 2014-07-02T14:30:41.990 に答える
0

例:

git config --global --add diff.tool winmerge
git config --replace --global difftool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE"
git config --global difftool.prompt false
于 2014-10-13T19:07:03.030 に答える