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
あなたはマージツールについて話しているが、あなた(および他の回答のある人)は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 もあることに言及します。
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
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
) 、 セバスチャンシューベルト(sschuberth
) 、 SZEDERGábor(szeder
)
すべての設定は、Git自体で mergetools/winmerge
:
"$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を使用できるようにします。
これが私のものです(%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\"
これはより簡単で、私にとってはうまくいったものです:
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
パスが間違っています。"/c/Program Files (x86)/WinMerge/WinMergeU.exe"
である必要があります。
ネイティブWindowsコマンドプロンプトではなく、シェルスクリプト環境で実行しています。
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
1時間以上これに悩まされた後、 tortoisegit をインストールしましたが、今のところ、私が望むものを正確に提供しています。
Tortoise gitのWinmergeの設定は http://thoai-nguyen.blogspot.com.au/2012/03/setup-tortoise-git-and-winmerge.html で説明されています
コマンドラインから設定を入力することは、他の回答で説明されています。 .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
フラグ情報:
trustExitCode = true
は、さらにプロンプトを表示せずに出力を受け入れるようにgitに指示します。
keepBackup = false
は、自動的に生成された*.orig
ファイル。
注:difftoolを使用する場合の$ BASE変数と$ MERGE変数には、両方とも単にファイル名が含まれます。
元々、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ファイルを手動で修正して、問題をソートしました。
例:
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