最近Ubuntu 12.04から12.10にアップグレードしましたが、ある時点で、Apache2.conf
でApache構成ファイルの競合が発生しました。その時点ではマージオプションを指定しなかったため、新しいファイルを拒否し、インストーラーは新しいファイルをApache2.conf.dpkg-dist
として保存しました。
2つのファイルをdiff Apache2.conf Apache2.conf.dpkg-dist
で比較して、異なる行だけを取得できます。しかし、SVNまたはgitでマージの競合を解決する方法など、2つの種類を手動でマージしたいと思います。どうやってやるの?
バージョン管理は、競合を解決するときに利用可能な詳細情報を持っています。自分のバージョンと他の人のバージョンだけでなく、共通の祖先もあるので、 3者間マージ 。ここで、共通の祖先は、ディストリビューションの構成ファイルの元のバージョン、または最後に変更とマージした公式バージョンです。
残念ながら、Ubuntuも、私が知っている他の主要なディストリビューションも、構成ファイルが更新されたときに3者間マージを完全にシームレスにすることができません。ただし、 etckeeper を使用すると近づくことができます。 Etckeeper は、バージョン管理システムで/etc
を管理するAPT(Debianおよびその派生物で使用されるパッケージ管理ツール)のアドオンです(バザール、ダークス、Git、マーキュリアル); Yum Fedoraを含む)他のシステムに移植されています。etckeeperを使用することをお勧めします。これは、/etc
で行った変更を追跡する優れた方法でもあります。
一部のプログラムは ucf を使用して構成ファイルを管理しますが、これはユーザーが制御できるものではありません。
より一般的には、祖先と2つのバージョンがある場合、 merge
ユーティリティに同梱されている [〜#〜] rcs [〜#〜] または diff3 -m
diffutils から.
非常に多くのインタラクティブなdiffおよびmergeプログラムもあります。 EmacsとVimには、ほとんどの diffビューア と同様に、そのためのインターフェースがあります。
私の個人的なお気に入りはkdiff3
-Ubuntuバージョンがあるかどうかはわかりません。 homepage によると、qtを使用するだけです。
このツールを使用すると、2つ(または3つ)のファイルを新しいファイルにマージできます。違いごとにサイドを選択するか、手動で競合を解決します。