CygwinでmsysGitとGitを試しました。どちらもそれ自体で問題なく動作し、gitk と git-gui を完全に実行します。
では、mergetool をどのように構成すればよいのでしょうか。(Vimdiff は Cygwin で動作しますが、できれば、Windows を愛する同僚のために、もう少しユーザー フレンドリーなものが欲しいです。)
Charles Bailey の回答をフォローアップするために、p4merge (無料のクロスプラットフォーム 3way マージ ツール) を使用している私の git セットアップを次に示します。msys Git (Windows) インストールでテスト済み:
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'
または、Windows cmd.exe シェルからは、2 行目が次のようになります。
git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
変更点 (チャールズ・ベイリーとの比較):
ダウンロード: http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools
編集(2014 年 2 月)
@Gregory Pakoszが指摘したように、最新のmsys gitは p4mergeを「ネイティブに」サポートするようになりました ( 1.8.5.2.msysgit.0でテスト済み)。
次のコマンドを実行すると、サポートされているツールのリストを表示できます。
git mergetool --tool-help
使用可能なリストまたは有効なリストにp4mergeが表示されます。そうでない場合は、git を更新してください。
p4mergeがavailableとしてリストされている場合、それはPATHにあり、 merge.toolを設定するだけで済みます。
git config --global merge.tool p4merge
validとしてリストされている場合は、 merge.toolに加えてmergetool.p4merge.pathを定義する必要があります。
git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
~
現在のユーザーのホームディレクトリに展開する必要がありますが(理論的にはパスは である必要があります)~/AppData/Local/Perforce/p4merge.exe
、これは私にとってはうまくいきませんでした$LOCALAPPDATA/Perforce/p4merge.exe
、git はパスの環境変数を展開していないようです (これを機能させる方法を知っている場合は、私に知らせるか、この回答を更新してください)。Git が p4merge のサポートを開始したため、mergetool.p4merge.cmd の設定は機能しなくなりました。libexec/git-core/git-mergetool--lib. を参照してください。
git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge
それはうまくいくでしょう。
私は WinXP で Portable Git を使用しており (うまく動作します!)、分岐で発生した競合を解決する必要がありました。私がチェックしたすべての GUI の中で、KDiff3が最も透過的であることがわかりました。
しかし、このブログ投稿で、Windows で動作させるために必要な手順を見つけました。この手順は、ここにリストされている他のアプローチとは少し異なります。基本的に、これらの行を.gitconfig
ファイルに追加することになりました。
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
keepBackup = false
trustExitCode = false
今は元気に働いています!
Cygwinの下で、私のために働いた唯一のものは次のとおりです。
git config --global merge.tool myp4merge
git config --global mergetool.myp4merge.cmd 'p4merge.exe "$(cygpath -wla $BASE)" "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)" "$(cygpath -wla $MERGED)"'
git config --global diff.tool myp4diff
git config --global difftool.myp4diff.cmd 'p4merge.exe "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)"'
また、difftool のプロンプト メッセージをオフにしたい:
git config --global difftool.prompt false
git mergetool
完全に設定可能なので、お気に入りのツールをほとんど選択できます。
完全なドキュメントはこちら: http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html
簡単に言えば、ユーザー構成変数を設定することで、デフォルトのマージツールを設定できますmerge.tool
。
マージ ツールがネイティブにサポートされているツールの 1 つである場合は、ツールへのフル パスを設定するだけです (構成したものにmergetool.<tool>.path
置き換えます)。<tool>
merge.tool
それ以外の場合は、適切なファイルに設定されmergetool.<tool>.cmd
たシェル変数を使用して、実行時に評価されるシェルを少し設定できます。$BASE, $LOCAL, $REMOTE, $MERGED
構成ファイルを直接編集するか、コマンドで変数を設定するかにかかわらず、エスケープには少し注意する必要がありますgit config
。
このようなものは、あなたができることの風味を与えるはずです (「mymerge」は架空のツールです)。
git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'
お気に入りのマージ ツールをセットアップしたら、git mergetool
競合が発生したときに実行するだけです。
Perforce の p4merge ツールは、非常に優れたスタンドアロンのマージ ツールです。
Windows 7 での比較を超えて
git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"
すでに回答されているように ここ (およびこことここ)、mergetool はこれを構成するコマンドです。優れたグラフィカル フロントエンドとして、 kdiff3 (GPL)をお勧めします。
Windows 7でmsysGitを使用して余分な引用符を削除する必要がありましたが、理由はわかりません.
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
github Windows で「 SourceGear DiffMerge」を difftool および mergetool として構成する 2 つの方法を見つけました。
コマンド プロンプト ウィンドウで次のコマンドを実行すると、.gitconfig が更新され、GIT で DiffMerge を使用するように構成されます。
git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"'
git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"'
[または]
次の行を .gitconfig に追加します。このファイルは、C:\Users\UserName のホーム ディレクトリにある必要があります。
[diff]
tool = diffmerge
[difftool "diffmerge"]
cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"
[merge]
tool = diffmerge
[mergetool "diffmerge"]
trustExitCode = true
cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
ああ、これは最終的に私にとってはうまくいきました(Windows 7 + Cygwin + TortoiseMerge):
.git/config:
cmd = TortoiseMerge.exe /base:$(cygpath -d \"$BASE\") /theirs:$(cygpath -d \"$REMOTE\") /mine:$(cygpath -d \"$LOCAL\") /merged:$(cygpath -d \"$MERGED\")
cygpath を使用するためのヒントについては、以前のポスターに感謝します!
cygwin でこれを行っている場合は、cygpath を使用する必要がある場合があります。
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge `cygpath -w $BASE` `cygpath -w $LOCAL` `cygpath -w $REMOTE` `cygpath -w $MERGED`'
WinMerge ( http://winmerge.org/ ) というアプリを使用します。マニュアル ( http://manual.winmerge.org/CommandLine.html )からの情報です。
mergetool
これは、ディレクティブから使用するbashスクリプトです.gitconfig
#!/bin/sh
# using winmerge with git
# replaces unix style null files with a newly created empty windows temp file
file1=$1
if [ "$file1" == '/dev/null' ] || [ "$file1" == '\\.\nul' ] || [ ! -e "$file1" ]
then
file1="/tmp/gitnull"
`echo "">$file1`
fi
file2=$2
if [ "$file2" == '/dev/null' ] || [ "$file2" == '\\.\nul' ] || [ ! -e "$file2" ]
then
file2="/tmp/gitnull"
`echo "">$file2`
fi
echo diff : $1 -- $2
"C:\Program files (x86)\WinMerge\WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$file1" "$file2"
基本的に、bash は差分の結果が空のファイルにある場合を考慮し、正しい場所に新しい一時ファイルを作成します。
これらのオプションも追加することができます:
git config --global merge.tool p4mergetool
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
git config --global mergetool.p4mergetool.trustExitCode false
git config --global mergetool.keepBackup false
また、理由はわかりませんが、ミラノ・ガーディアンの回答からの引用とスラッシュが私にとって物事を台無しにしました。
マージと差分の両方で Windows に Chocolatey を使用してインストールされた p4merge をセットアップするには、 https ://gist.github.com/CamW/88e95ea8d9f0786d746a を参照してください。
SourceTree から p4merge を開く際に問題がある場合は、MyRepo.git の下でconfigという名前のローカル構成ファイルを探し、マージ構成を削除します。私の場合、アンインストールしたばかりのMeldを開こうとしていた
kdiff3 の場合、次を使用できます。
git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global mergetool.kdiff3.trustExitCode false
git config --global diff.guitool kdiff3
git config --global difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false