web-dev-qa-db-ja.com

WinMergeをgit mergetoolにするにはどうすればよいですか?

Windows 7 Ultimateで他の人が行ったのを見たように、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
46
Wei Jin

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

マージツールを構成するには、次のように、merge.toolおよびmergetoolの代わりにdiff.toolおよびdifftool構成を使用する必要があります。

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番目のファイルを指定できることに言及していることです。

完全を期すために、diffツールとマージツールの両方のwinmergeの完全な構成を目的とした this Gist もあることに言及します。

61
eis

SourceTree(またはSourceTreeを使用するGoogleサーチャー)を使用する場合は、Merge Toolをカスタムに設定し、DiffコマンドをWinMergeU.exeにポイントすることにより、Merge ToolにWinMergeを使用できます。

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

引数では次を使用します。

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

これにより、左側(「鉱山」というラベル)が編集可能になり、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
26
CapinWinky

Git 2.5+(2015年第2四半期)には、既知のWinmergeが含まれます git mergetool

Winmergeが%PATH%、a git config merge.tool winmergeはあなたがする必要があるすべてです!
(差分ツールでも機能します:git config diff.tool winmerge

commit 3e4f237 by David Aguilar(davvid 、2015年5月20日を参照してください。
浜野邦夫-gitster- in commit 324a9f4 、2015年6月1日)
支援者: フィリップオークリー(PhilipOakleyヨハネスシンデリン(dschoセバスチャンシューベルト(sschuberthSZEDERGábor(szeder

すべての設定は、Git自体で mergetools/winmerge

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

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

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

26
VonC

これが私のものです(%userprofile%\.gitconfig、または~/.gitconfig on * 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\"
14
ellotheth

これはより簡単で、私にとってはうまくいったものです:

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
7
gman

パスが間違っています。"/c/Program Files (x86)/WinMerge/WinMergeU.exe"である必要があります。

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

4
Thach Mai

Visual Studio 2017 Gitプラグインの比較およびマージツールとしてWinMergeを実行するには:

Windowsコマンドプロンプトから:>> git config --global --editと入力して、編集する.getconfigファイルを開きます。

以下のコマンドで更新してください:

[mergetool]
   Prompt = false
   keepBackup = false
   keepTemporaries = false
[merge]
   tool = winmerge
   [mergetool "winmerge"]
   name = WinMerge
   trustExitCode = true
   cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[diff]
   tool = winmerge
   [difftool "winmerge"]
   name = WinMerge
   trustExitCode = true
   cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -u -e $LOCAL $REMOTE
3
Zin Min

1時間以上これに悩まされた後、 tortoisegit をインストールしましたが、今のところ、私が望むものを正確に提供しています。

Tortoise gitのWinmergeの設定は http://thoai-nguyen.blogspot.com.au/2012/03/setup-tortoise-git-and-winmerge.html で説明されています

1
andersonbd1

コマンドラインから設定を入力することは、他の回答で説明されています。 .gitconfig WinMergeとの完全な3方向マージのファイルは、次のように構成できます(この例は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変数には、両方とも単にファイル名が含まれます。

1
Isaac Brown

元々、SourceTreeのWinMergeを使用した@CapinWinkyの回答を支持しました。その答えはまだ有効ですが、WinMergeは現在、追加のパラメーターを必要とする3者間マージもサポートしています。

[SourceTreeオプション]ダイアログ内で、マージツールとして[カスタム]を選択し、次のようにコマンドを入力しました。

C:\Program Files\WinMerge\WinMergeU.exe

および引数として:

-u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED

スペースが含まれるパスに対応するために、リモート/ローカル/ベースパラメータを引用符で囲む必要はないようです。

この構成は、中央のペインをマージされた出力ファイルとして使用するためのものです。

コマンドラインリファレンス

マージしようとすると、WinMergeが開かないという問題がありました。 SourcetreeはGitを起動して、選択したツールを開きます。 Sourcetreeのカスタムオプションを使用する場合、git構成ファイル(C:\ Users\Me\.gitconfigなど)が変更され、「sourcetree」と呼ばれる新しいMergeツールが追加され、Gitコマンドには--tool=sourcetree。ある時点で、.gitconfigファイルが正しく更新されていなかったため、そのセクションに2つの「cmd」行があり、1行が壊れていました。

[mergetool "sourcetree"]
    cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' -u -fm -wl -wr -dl Remote_RO -dm Local_Merged -dr Base_RO $REMOTE $LOCAL $BASE -o $MERGED
    trustExitCode = true
    cmd = 'C:/Program '

.gitconfigファイルを手動で修正して、問題をソートしました。

0
Daz

例:

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
0
zumalifeguard