質問

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

どのようにマージツールを設定しますか? (VimdiffはCygwinで動作しますが、できればWindowsを愛する同僚の一部にとって、もう少しユーザーフレンドリーなものが欲しいです。)

役に立ちましたか?

解決

Charles Baileyの回答をフォローアップするために、 p4merge (無料のクロスプラットフォーム3wayマージツール); 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\""

変更(Charles Baileyに関連):

  • グローバルgit構成に追加されました。つまり、現在のプロジェクトだけでなく、すべてのgitプロジェクトに有効です
  • カスタムツールの設定値は、<!> quot; merge。[tool] .cmd <!> quotではなく、<!> quot; mergetool。[tool] .cmd <!> quot;にあります。 (私は愚かな、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 が<!> quot; natively <!> quot;になりました。 p4merge をサポートします( 1.8.5.2.msysgit.0 でテスト済み)。

次を実行すると、サポートされているツールのリストを表示できます:

git mergetool --tool-help

利用可能または有効リストに p4merge が表示されます。そうでない場合は、gitを更新してください。

p4merge available としてリストされていた場合、それは PATH にあり、 merge.tool

git config --global merge.tool p4merge

それが有効としてリストされている場合、 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はパスの環境変数を拡張していないようです(これを機能させる方法を知っているなら、私に知らせてください。回答)

他のヒント

Gitがp4mergeのサポートを開始したため、mergetool.p4merge.cmdの設定は機能しなくなりました。libexec/ git-core / git-mergetool--lib.soを参照してください。たとえば、gitのmergetoolパスを指定するだけです。 p4merge:

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を設定することでデフォルトのmergetoolを設定できます。

マージツールがネイティブでサポートされているツールの1つである場合は、mergetool.<tool>.pathをツールへのフルパスに設定する必要があります(<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"'

お気に入りのマージツールをセットアップしたら、解決する競合がある場合は常に<=>を実行するだけです。

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"

新しいgitバージョンはp4mergeを直接サポートしているようですので、

git config --global merge.tool p4merge

p4merge.exeがパスにある場合、必要なものはすべて必要です。 cmdやパスを設定する必要はありません。

既にここで回答したとおり(およびこちらおよび< a href = "https://stackoverflow.com/questions/161813/how-do-i-fix-merge-conflicts-in-git">こちら)、mergetoolはこれを設定するコマンドです。グラフィカルなフロントエンドとしては、 kdiff3 (GPL)をお勧めします。

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

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'

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`'

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

i WinMergeというアプリを使用します( http://winmerge.org/ ) マニュアルの情報( http://manual.winmerge.org/CommandLine.html

これは、mergetool

を介して.gitconfigディレクティブから使用するbashスクリプトです
#!/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は、差分の結果が空のファイルにある場合を考慮し、正しい場所に新しい一時ファイルを作成します。

<!> quot; SourceGear DiffMerge <!> quot;を設定する2つの方法を見つけました。 github Windowsのdifftoolおよびmergetoolとして。

コマンドプロンプトウィンドウで次のコマンドを実行すると、GitがDiffMergeを使用するように.gitconfigが更新されます。

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

[ OR ]

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

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

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

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

TortoiseGitの差分ツールとしてgvimを使用したい場合は、外部差分ツールへのパスのテキスト入力に入力する必要があります:

path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"

IntelliJ IDEA(Community Edition)Windows環境での3ウェイgit mergetool構成の場合(~/.gitconfig

Cygwin

[mergetool "ideamerge"]
     cmd = C:/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe merge `cygpath -wa $LOCAL` `cygpath -wa $REMOTE` `cygpath -wa $BASE` `cygpath -wa $MERGED`
[merge]
     tool = ideamerge

Msys

[mergetool "ideamerge"]
cmd = "/c/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe" merge `~/winpath.sh $LOCAL` `~/winpath.sh $REMOTE` `~/winpath.sh $BASE` `~/winpath.sh $MERGED`
[merge]
 tool = ideamerge

〜/ winpath.shは、msysでパスをWindowsに変換するためのもので、 stackoverflowでのmsysパス変換の質問

#! /bin/sh                                                               

function wpath {                                                         
    if [ -z "$1" ]; then                                                 
        echo "$@"                                                        
    else                                                                 
        if [ -f "$1" ]; then                                             
            local dir=$(dirname "$1")                                    
            local fn=$(basename "$1")                                    
            echo "$(cd "$dir"; echo "$(pwd -W)/$fn")" | sed 's|/|\\|g';  
        else                                                             
            if [ -d "$1" ]; then                                         
                echo "$(cd "$1"; pwd -W)" | sed 's|/|\\|g';              
            else                                                         
                echo "$1" | sed 's|^/\(.\)/|\1:\\|g; s|/|\\|g';          
            fi                                                           
        fi                                                               
    fi                                                                   
}                                                                        

wpath "$@" 

mergeとdiffの両方で、chocolateyを使用してWindowsにインストールされたp4mergeをセットアップするには、以下をご覧ください。 https://gist.github.com/CamW/88e95ea8d9f0786d746a

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top