57

私はGit 拡張機能を使用しており、マージの競合を解決するための差分ツールとして KDiff をプレインストールしてセットアップします。私は Winmerge がとても好きで、KDiff を Winmerge に置き換えたいと思っています。

Git 拡張機能の設定には、Mergetool を変更するための設定がありますが、どの構文を使用すればよいのか、またその理由がわかりません。$BASE、$LOCAL、$REMOTE、$MERGED の 4 つの変数があるようです。これらを WinMergeU.exe に渡す必要があるようですが、どのコマンド ライン パラメータを使用するのでしょうか?

これを数回検索しようとしましたが、実際に機能しているように見える答えはありません。

4

5 に答える 5

56

概要
以下は、デフォルトのインストールよりも優れたツール セットを使用できるように、GIT バージョン コントロールをセットアップする方法の手順です。セットアップには、GIT 拡張機能が既にインストールされている必要があり、GIT 拡張機能で Winmerge を構成する必要があります。

インストール
すべてのプロンプトを確認し、Winmerge のデフォルト ディレクトリにインストールします。

GIT バージョン管理で Winmerge を構成
する テキスト エディターで新しいドキュメントを開きます。以下をコピーして貼り付け、ドキュメントを「wMerge.sh」として「C:\Program Files (x86)\Git\bin\」ディレクトリに保存します。

echo Launching WinMerge: $1 $2 "C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -u -dl "Original" -dr "Modified" "$1" "$2"

「Users->username」ディレクトリに移動し、.gitconfig ファイルを見つけます。お気に入りのエディターで開き、次のコードをコピーして貼り付け、保存します。

[user]
    name = enter your name
    email = youremail@yourdomain.com
[core]
    autocrlf = false
[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = wMerge.sh \"$MERGED\" \"$REMOTE\"
    path = c:/Program Files (x86)/winmerge/winmergeu.exe
[mergetool]
    keepBackup = false
    trustExitCode = false
[diff]
    guitool = winmerge
[difftool "winmerge"]
    path = c:/Program Files (x86)/winmerge/winmergeu.exe
    cmd = \"c:/Program Files (x86)/winmerge/winmergeu.exe\" \"$LOCAL\" \"$REMOTE\"

「GitExtensions」を実行し、「tools->Settings->Git Extensions->Git Config」に移動します。インストールを適切に行い、ツールのディレクトリを参照した場合、グローバル設定ページは次のようになります (注: 名前と電子メールに名前を記入してください):

mergetool:マージツールへのパスwinmerge
: c:/Program Files (x86)/winmerge/winmergeu.exe
mergetool コマンド: wMerge.sh "$MERGED" "$REMOTE"
difftool:winmerge
パスdifftool へ: c:/Program Files (x86)/winmerge/winmergeu.exe
difftool コマンド:行末: そのまま"c:/Program Files (x86)/winmerge/winmergeu.exe" "$LOCAL" "$REMOTE"

チェックアウト、そのままコミット

チェックリスト タブに移動して、GIT がすべて「グリーン」であり、セットアップに満足していることを確認します。

于 2011-11-18T22:48:11.890 に答える
12

Windows 7では、これが最終的にうまくいきました。"'c:/path/here'"プログラム ファイル パスを囲む引用符に注意してください。

[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$MERGED"
[diff]
    tool = winmerge
[difftool "winmerge"]
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$LOCAL" "$REMOTE" -dl "Local" -dr
于 2013-03-20T14:10:30.700 に答える
8

@sebastiaanの答えは私にはうまくいきませんでした(多分それは時代遅れですか?)

これらは、GitExtensions2.28を使用して機能する「グローバル設定」です。

Mergetool:winmerge
mergetoolへのパス:D:/path/to/WinMerge/WinMergeU.exe
Mergetoolコマンド:"D:/path/to/WinMerge/WinMergeU.exe" -e "$MERGED"
これにより、WinMergeはgitによって生成された「競合ファイル」を使用します。
-eESCを押してwinmergeを閉じることができます。

Difftool:winmerge
difftoolへのパス:D:/path/to/WinMerge/WinMergeU.exe
Difftoolコマンド:"D:/path/to/WinMerge/WinMergeU.exe" -e "$LOCAL" "$REMOTE" -dl "Local" -dr "Remote"
-dlそして-dr、左右のペインの説明を設定します。

于 2012-01-03T15:50:05.913 に答える
3

構成ファイルで次を追加または変更します。

[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = $PROGRAMFILES/WinMerge/WinMergeU.exe "$PWD/$MERGED"

このソリューションは、次の 2 つの点で異なります。

  1. 単純に を呼び出しますがWinMergeU.exe *conflictfile*、両側の呼び出しでは、左側のウィンドウ<<<<<<<に 、 =======、および>>>>>>>$MERGED に含まれるマーカーが表示されるという問題があります。
  2. リポジトリごとに mergetool を適用します - $GIT_DIR/config ファイルを編集しています。--system または --global 引数なしで git config を呼び出しても、同じ結果が得られます。これは、選択できる構成のスコープがいくつかあることに注意してください。

$PROGRAMFILES 変数は git bash によって維持され、(ネイティブ Windows cmd の同様の変数とは異なり) 「Program Files (x86)」に移動します。

于 2013-02-14T22:56:03.520 に答える