vimdiffおよびマージの競合


14

ソース管理下でブランチをマージする場合、他の開発者とのマージ競合の問題がしばしば発生します。

vimdiffを使用してソース管理に対するコード変更を比較できることは知っていますが、vimdiffを使用してマージの競合の競合を解決する方法もあります。

個人的に私はgitにもっと興味がありますが、他のソース管理ツール/システム用のプラグイン/技術があるかどうかを理解することは有益でしょう。


あなたは今まで与えているメルドに試して?
エリックサベルハウス

1
@EricSabelhaus:競合を解決するのにvimdiffより良いですか?このサイトは、vimについての質問/回答に関するものです。
マーティンヨーク

ユースケースに依存します。リモートに存在するコードに取り組んでいる場合、vimdiffを使用することは間違いありません。開発マシンでローカルで作業している場合、Meldを使用します。これは、機能豊富なUIを提供し、開発者が複雑な3方向のマージを実行できるようにするためです。
エリックサベルハウス

1
@EricSabelhaus:私にとって、この用語feature rich UIは誤解を招くものです。vimdiffには優れたUIがない場合がありますが、機能が豊富です。また、vimは、これまで使用していたすべてのGUIエディターよりもはるかに生産的な環境であることがわかりました(ただし、これは長い間使用しており、学習曲線は急勾配でした)。Meldが、vimがしないことで、見ているだけでも価値があるようなことをするのであれば、もっと興味があります。
マーティンヨーク

より堅牢な機能セットがあるかどうかを具体的に言うことはできませんが、それは間違いなくvimdiffと同じ領域にあります。
エリックサベルハウス

回答:


18

通常、コマンドラインでgitを使用します。

しかし、マージの競合がある場合、私はVimを使用してそれらを解決します(個人的には逃亡プラグインでそれを行います)。注:逃亡者は、Vim内からの多くのgit操作に適しています。私のお気に入りの機能は、マージ競合の3方向の差分です。

gitはgit mergetoolを介してvimdiffでこれをサポートします。逃亡者をインストールしましたが、手動でセットアップできます(@Jay Thompsonに感謝)。

手動設定:

git config --global merge.tool vimdiff
git mergetool <file with conflicts>

出力は、以下で説明するものとわずかに異なります(私はこれを個人的に使用していません)。しかし、原理は同じですが、結果を含む4番目のウィンドウが下部にあります。

ここに画像の説明を入力してください

Fugitiveでセットアップする

vim-fugitiveはVimのgit wrapper / integrationプラグインです。それは多くのことを行うことができ、競合の解決はそれらの1つです。

<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
  1. ビュー2(左):ブランチ上にあったコード。
  2. ビュー1(中央):マージされたコード(競合あり)
  3. ビュー3(右):コードにマージされたコード。

これで、他の2つのビューから中央のビュー(すべての手動修正を含む)にテキストを引き出して取得できます。すべての競合を手動で解決したら、vimdiffを終了します

ここに画像の説明を入力してください

を使用:diffget <view number>:diffput <view number>て、ビュー間で物事をプルおよびプッシュできますが。私は個人的にそれが非常に便利だとは思わない。すべてのコードはすでに中央のビューにあります。そのため、競合が解決されるまで、そのビューを手動で編集したいだけです。エディターウィンドウの両側で両方のバージョンのコードを表示できることは非常に便利ですが。

また、ここでの使用の非常に良いデモ


1
何らかの理由でFugitiveを使用またはインストールしたくない場合は、単に設定git config --global merge.tool vimdiffしてから実行git mergetoolして、Vimをdiffモードで起動することもできます。
ジェイトンプソン

これは、「マージされた共通の祖先」が表示される「diff3」スタイルのマージ競合をサポートしますか?
-alxndr

@alxndr:以前にdiff3について聞いたことがありません。しかし、簡単なグーグルの後。git(および私が使用した他のソース管理)でのマージ競合の出力は、aと同じdiff3 -Eです。したがって、上記の画像は、これらのマーカーが含まれるファイルから生成されます。
マーティンヨーク

よく見ると、最初のスクリーンショットはdiff3スタイルのマージを示しています。中央の上部ペイン「BASE」は共通の祖先であり、左右のペインは分岐します。
alxndr

1
これら4つのビューのそれぞれは単なるバッファであることを覚えておくことが重要です。これは、別のタブを開いて(または同じウィンドウにとどまることもできます)、任意の時点で見たいバッファーのみを選択できることを意味します。4つすべてのウィンドウを使用していない場合、一度に4つのウィンドウすべてを開いたままにする理由はありません。
コーディポール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.