19

ドキュメントの状態Aにいるとしましょう。次に、B、C、Dを(順番に)変更します。

変更BとDを保持しながら、Cをスキップする方法はありますか?

または、ドキュメントの状態Aにいるとしましょう。私は変更Bを行い、それを元に戻し、次にCとDを変更します(したがって、Vimには2つのブランチを持つ元に戻すツリーがあります)。次に、考えを変えて、CではなくBとDを使用することにしました。

Vimでこれを行うにはどうすればよいですか?プラグインをインストールしましたが、gundo.vimあまり使用していません。

4

2 に答える 2

2

さて、私はこれを突き刺して言います:いいえ、vimであなたが望むことを正確に行う方法はないと思います。

gundo.vimvimのundoに優れたインターフェイスを追加しますが、コア機能は変更しません。そこで、公式のvimドキュメントを見て、これが可能かどうかについてのヒントがあるかどうかを確認しました。

2つのブランチをマージすることについては何もありません。ewhとZyXは正しいと思います。BとDをマージするための一般的なソリューションを取得するには、vimは次のいずれかを必要とします。

  1. 将来のバージョンで別の機能として追加するBram
  2. すでにマージできるもの(git / hgなど)と統合してプラグインに実装する人

もちろん、バージョンB、C、Dのファイルと、いくつかの差分を開いて、手動で実行することもできます。


注:私が誤解していて、一般的な解決策について疑問に思っておらず、この特定のインスタンスについてのヘルプを探している場合は、私に知らせてください。私に何ができるかを見ていきます:)

于 2011-04-26T23:16:23.943 に答える
1

変更 B と D を保持し、C をスキップする方法はありますか?

状態 D です。:w file.ext_D

状態 C に戻ります。 :w file_ext_C

状態 B に戻ります。 :w file.ext_B

:!kdiff3 file.ext_B file.ext_C file.ext_D

これにより、相違点の 3 通りのマージが行われますが、マージの競合ごとに手動で D のすべての赤い線を選択する必要があります。簡単な解決策ではありません。

代わりに

:!kdiff3 file.ext_C file.ext_B file.ext_D

次に、マージが自動的に行われます (複数の変更がある個々の行を除く)。

より複雑なシナリオでは、より困難になります。

注: リビジョン管理ツールがどのように役立つかはわかりません。基本的には、B と D の間にパッチを作成し、そこから C から D へのパッチを差し引くようなことを行っています。リビジョン管理システムは通常、単一のブランチに沿った変更ではなく、変更の異なるソース間のマージを管理するように設計されているようです。

kdiff3 はhttp://kdiff3.sourceforge.net/で入手できます。

于 2011-04-28T14:05:46.910 に答える