2

逃亡者との対立を解決することは素晴らしいことです。Painless Merge Conflict Resolution in Gitを読んだ後 、行レベルだけでなく単語レベルでも変更を表示する方法を考え始めました。

すべての例/ケースは、 painless_git_conflicts_resolution repoに基づいています。ハブgit cloneは、コマンドをより簡潔にするために使用されました。

diff3紛争スタイルを無効にした逃亡者。

hub clone ryrych/painless_git_conflicts_resolution fugitive_no_diff3 cd fugitive_no_diff3/ git checkout beta git merge origin/master vim roses.txt :Gdiff

結果は次のとおりです。

diff3 を有効にせずに逃亡者との競合を解決する

問題は、すべての行が何らかの方法で変更されたことしか確認できないことです。この例は非常に短いですが、 3 行目にofが追加されていることに気付いた人は何人いますか?

RubyMine はそれを解決できますが、常にではありませんが、多くの場合、diff マークが残り、diff の強調表示がありません。このスクリーン ショットには diff マークはありませんが、「コントラスト」がないため、競合を解決するのが非常に難しくなっています。

RubyMine との競合の解決

diff3 を有効にした逃亡者 + 共通の祖先を表示:

show base in fugitive.vim conflict diff stackoverflow question で、受け入れられた答えを試してみましたが、解決策は改善されませんでした。

hub clone ryrych/painless_git_conflicts_resolution fugitive_with_diff3 cd fugitive_with_diff3/ git checkout beta git merge origin/master vim roses.txt :split :Gdiff [Ctrl][W][J] :Gedit :1

diff3 を無効にせずに逃亡者との競合を解決する

opendiff としてmergetool

hub clone ryrych/painless_git_conflicts_resolution opendiff cd opendiff/ git checkout beta git merge origin/master git mergetool

そしてほら!

opendiff との競合の解決

もちろん、これで問題は解決しますが、1 つのシステム専用に設計された外部ツールに頼らざるを得なくなります。要約すると、Vimでopendiffと同様のことを達成することは可能ですか?

4

1 に答える 1

1

私のマシン(vim 7.4を実行)では、すべての差分が行内の違いを強調表示することがわかりました。のテキストは:help view-diff、これが標準的な動作であることを暗示しています。機能をオンまたはオフにすることについては何も述べていませんが、hl-DiffText強調表示グループが「変更された行内の変更されたテキスト」に使用されているだけです。

別の配色を試すか、少なくとも現在の配色が外観を定義していることを再確認してくださいhl-DiffText

編集: どうやら、与えられた例は実際には単語レベルの違いを示すのに本当に悪いです。すべての行は複数の場所で変更されており、非常に短く、コンテキストを提供するために完全に変更されていない行はありません。スクリーンショットでわかるように、競合マーカーを削除すると、すべての「すべてのベース」行が同じ行番号に配置され、単語レベルの違いが強調表示されます。より複雑なレポ/マージの競合を試してみることをお勧めします。

:vimのGdiffが単語レベルの変更を表示しない

:単語レベルの変化を示す vim の Gdiff

于 2015-04-02T17:30:25.857 に答える