git mergetoolは差分を視覚的にマージするための便利なユーティリティであることがわかりましたが、その方法は本当に不安定です。基本的に、競合が報告されると、私のプロセスは次のようになります。
複数の競合がある場合は、すすぎ、繰り返します。ええ、それは私がマージの競合ごとに差分ビューアーを一度開いたり閉じたりすることです。コマンドラインから起動されるため、この特定の競合を解決し、次の手順に進むことができることをgit mergetoolに伝える唯一の方法は、閉じることです。
確かにもっと良い方法はありますが、私にはわかりません。助けてください?このプロセスは非常に非効率的です。
選択したmergetoolが既存のインスタンスでファイルを開くことをサポートしている場合、git configでコマンドを指定できます。
% git config mergetool.whatever_you_want.cmd 'exec /path/to/merge/tool $LOCAL $MERGED $REMOTE'
% git config merge.tool whatever_you_want
git mergetool
は、カスタムコマンドを実行し、ファイルが正常にマージされたかどうかを確認します(終了コードを確認する代わりに)。
Vimdiffのために一緒にハックした例:
% git config mergetool.persistent.cmd 'gvim --remote-tab-silent "+set buftype=nowrite" "$PWD/$BASE" && sleep 1; gvim --remote-send ":split $PWD/$REMOTE<CR>:set buftype=nowrite<CR>:vertical diffsplit $PWD/$MERGED<CR>:vertical diffsplit $PWD/$LOCAL<CR>:set buftype=nowrite<CR><C-W>l"'
これは十分に機能します。自分で使い始めるかもしれません!
Mergetoolの問題は、意図的にコマンドラインインターフェイスを使用してマージセッションを開始し、呼び出されたコマンドが戻ってユーザードリブンマージの完了を判断するのを待つことです。
ほとんどのマージツールは、既に実行中のプロセスでマージセッションを開始するためのコマンドラインメカニズムを提供していません。また、解決が完了したときと成功したかどうかを判断する方法があります。
いくつかのマージツールは、別個のラッパーコマンドと何らかのIPCを介してこの機能を提供できると考えられますが、非常にツール固有であり、一般的なmergetoolプログラムで実装するのは困難です。