53

git mergetoolは、差分を視覚的にマージするための便利なユーティリティであることがわかりましたが、私が行っている方法は本当に不安定なようです。基本的に、競合が報告されたときの私のプロセスは次のようになります。

  1. gitmergetoolを実行します
  2. プロンプトで、Enterキーを押して、差分ツールを起動します(コンピューターに応じて、MeldまたはFileMerge)
  3. 競合を解決する
  4. 変更を保存します
  5. 差分ツールを閉じます

複数の競合がある場合は、すすぎ、繰り返します。うん、それは私がマージの競合ごとに1回diffビューアを開いたり閉じたりすることです。これはコマンドラインから起動されるため、閉じることが、この特定の競合を解決し、次の競合に進むことができることをgitmergetoolに伝える唯一の方法です。

確かにもっと良い方法がありますが、私にはわかりません。助けてください?このプロセスは非常に非効率的です。

4

4 に答える 4

22

選択した 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"'

これは十分に機能します。自分で使い始めるかもしれません。

于 2009-02-25T16:26:30.860 に答える
12

mergetool の問題は、意図的にコマンド ライン インターフェイスを使用してマージ セッションを開始し、呼び出されたコマンドが戻るのを待って、ユーザー主導のマージがいつ完了したかを判断することです。

ほとんどのマージ ツールには、既に実行中のプロセスでマージ セッションを開始するためのコマンド ライン メカニズムが用意されていません。

一部のマージ ツールは、別のラッパー コマンドとある種の IPC を介してこの機能を提供できると考えられますが、非常にツール固有であり、汎用の mergetool プログラムで実装するのは困難です。

于 2009-02-25T14:39:23.473 に答える
1

私はこの答えを非常に、非常に、非常に長い間探していました。今、私はついにこの簡単な解決策を手に入れました(驚くべきことに):

溶ける。

これにより、バージョン管理ビューでメルドが開きます。このようにして、タブ内の競合を解決し、[解決済みとしてマーク] ボタンをクリックするたびに解決済みとしてマークすることができます。

于 2020-09-03T03:22:04.153 に答える