364

CygwinでmsysGitとGitを試しました。どちらもそれ自体で問題なく動作し、gitk と git-gui を完全に実行します。

では、mergetool をどのように構成すればよいのでしょうか。(Vimdiff は Cygwin で動作しますが、できれば、Windows を愛する同僚のために、もう少しユーザー フレンドリーなものが欲しいです。)

4

19 に答える 19

327

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\""

変更点 (チャールズ・ベイリーとの比較):

  • グローバル git config に追加されました。つまり、現在のプロジェクトだけでなく、すべての git プロジェクトで有効です。
  • カスタムツールの設定値は、「merge.[tool].cmd」ではなく「mergetool.[tool].cmd」にあります(ばかげた私は、gitが存在しないツールについて不平を言い続けた理由のトラブルシューティングに1時間費やしました)
  • すべてのファイル名に二重引用符を追加して、スペースを含むファイルをマージ ツールで見つけることができるようにしました (Powershell の msys Git でこれをテストしました)。
  • デフォルトでは、Perforce はそのインストール ディレクトリを PATH に追加するため、コマンドで p4merge へのフル パスを指定する必要はありません。

ダウンロード: 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
  • 上記は、システム全体ではなく、現在のユーザーに対して p4merge がインストールされた場合のパスの例です (管理者権限や UAC 昇格は必要ありません)。
  • ~現在のユーザーのホームディレクトリに展開する必要がありますが(理論的にはパスは である必要があります)~/AppData/Local/Perforce/p4merge.exe、これは私にとってはうまくいきませんでした
  • 環境変数 (例: ) を利用するほうがよかったのですが$LOCALAPPDATA/Perforce/p4merge.exe、git はパスの環境変数を展開していないようです (これを機能させる方法を知っている場合は、私に知らせるか、この回答を更新してください)。
于 2009-01-12T16:41:52.187 に答える
89

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

それはうまくいくでしょう。

于 2012-03-24T11:53:11.393 に答える
62

私は WinXP で Portable Git を使用しており (うまく動作します!)、分岐で発生した競合を解決する必要がありました。私がチェックしたすべての GUI の中で、KDiff3が最も透過的であることがわかりました。

しかし、このブログ投稿で、Windows で動作させるために必要な手順を見つけました。この手順は、ここにリストされている他のアプローチとは少し異なります。基本的に、これらの行を.gitconfigファイルに追加することになりました。

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false

今は元気に働いています!

于 2011-04-03T12:28:32.057 に答える
20

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
于 2010-11-10T23:38:32.700 に答える
17

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 ツールは、非常に優れたスタンドアロンのマージ ツールです。

于 2009-01-08T21:37:02.053 に答える
9

Windows 7 での比較を超えて

git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"
于 2014-03-25T17:56:42.623 に答える
5

すでに回答されているように ここ (およびここここ)、mergetool はこれを構成するコマンドです。優れたグラフィカル フロントエンドとして、 kdiff3 (GPL)をお勧めします。

于 2009-01-08T23:38:39.780 に答える
4

Windows 7でmsysGitを使用して余分な引用符を削除する必要がありましたが、理由はわかりません.

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
于 2009-08-02T02:04:20.757 に答える
4

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\"
于 2017-02-17T10:52:38.057 に答える
3

ああ、これは最終的に私にとってはうまくいきました(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 を使用するためのヒントについては、以前のポスターに感謝します!

于 2011-01-13T15:08:50.097 に答える
3

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`'
于 2010-03-30T17:39:15.830 に答える
3

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 は差分の結果が空のファイルにある場合を考慮し、正しい場所に新しい一時ファイルを作成します。

于 2012-12-20T22:40:31.223 に答える
1

これらのオプションも追加することができます:

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

また、理由はわかりませんが、ミラノ・ガーディアンの回答からの引用とスラッシュが私にとって物事を台無しにしました。

于 2014-05-04T21:26:56.020 に答える
0

マージと差分の両方で Windows に Chocolatey を使用してインストールされた p4merge をセットアップするには、 https ://gist.github.com/CamW/88e95ea8d9f0786d746a を参照してください。

于 2015-01-20T06:15:30.577 に答える
0

SourceTree から p4merge を開く際に問題がある場合は、MyRepo.git の下でconfigという名前のローカル構成ファイルを探し、マージ構成を削除します。私の場合、アンインストールしたばかりのMeldを開こうとしていた

于 2016-08-17T16:21:58.440 に答える
0

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
于 2020-07-03T14:48:07.780 に答える