web-dev-qa-db-ja.com

2つのテキストファイルを「マージ」するにはどうすればよいですか?

最近Ubuntu 12.04から12.10にアップグレードしましたが、ある時点で、Apache2.confでApache構成ファイルの競合が発生しました。その時点ではマージオプションを指定しなかったため、新しいファイルを拒否し、インストーラーは新しいファイルをApache2.conf.dpkg-distとして保存しました。

2つのファイルをdiff Apache2.conf Apache2.conf.dpkg-distで比較して、異なる行だけを取得できます。しかし、SVNまたはgitでマージの競合を解決する方法など、2つの種類を手動でマージしたいと思います。どうやってやるの?

13
Steven

vimdiffが必要な場合は vim を使用します。それ以外の場合は、 diffuse も同様に機能します。

7
dset0x

バージョン管理は、競合を解決するときに利用可能な詳細情報を持っています。自分のバージョンと他の人のバージョンだけでなく、共通の祖先もあるので、 3者間マージ 。ここで、共通の祖先は、ディストリビューションの構成ファイルの元のバージョン、または最後に変更とマージした公式バージョンです。

残念ながら、Ubuntuも、私が知っている他の主要なディストリビューションも、構成ファイルが更新されたときに3者間マージを完全にシームレスにすることができません。ただし、 etckeeper を使用すると近づくことができます。 Etckeeper は、バージョン管理システムで/etcを管理するAPT(Debianおよびその派生物で使用されるパッケージ管理ツール)のアドオンです(バザール、ダークス、Git、マーキュリアル); Yum Fedoraを含む)他のシステムに移植されています。etckeeperを使用することをお勧めします。これは、/etcで行った変更を追跡する優れた方法でもあります。

一部のプログラムは ucf を使用して構成ファイルを管理しますが、これはユーザーが制御できるものではありません。

より一般的には、祖先と2つのバージョンがある場合、 merge ユーティリティに同梱されている [〜#〜] rcs [〜#〜] または diff3 -mdiffutils から.

非常に多くのインタラクティブなdiffおよびmergeプログラムもあります。 EmacsとVimには、ほとんどの diffビューア と同様に、そのためのインターフェースがあります。

私の個人的なお気に入りはkdiff3-Ubuntuバージョンがあるかどうかはわかりません。 homepage によると、qtを使用するだけです。

このツールを使用すると、2つ(または3つ)のファイルを新しいファイルにマージできます。違いごとにサイドを選択するか、手動で競合を解決します。

1
Nils