Как «объединить» два текстовых файла?


13

Я недавно обновил Ubuntu 12.04 до 12.10, и в один прекрасный момент он столкнулся с конфликтом конфигурационного файла Apache в apache2.conf. Я не дал мне опции слияния в тот момент, поэтому я просто отклонил новый файл, и установщик сохранил новый файл как apache2.conf.dpkg-dist.

Я могу различить два файла diff apache2.conf apache2.conf.dpkg-distи получить только строки, которые отличаются. Но я хочу вручную объединить два типа, например, как я разрешаю конфликты слияния в SVN или git. Как я могу это сделать?


Без правильного парсера вы можете объединить их только вручную
маргаритка

Ответы:



2

Контроль версий имеет больше информации, когда он разрешает конфликты: у него есть не только ваша версия и версия другого парня, но и общий предок, и, следовательно, он может выполнять трехстороннее слияние . Здесь общим предком является исходная версия файла конфигурации в дистрибутиве или официальная версия, которую вы в последний раз объединили с вашими изменениями.

К сожалению, ни Ubuntu, ни какой-либо другой крупный дистрибутив, о котором я знаю, не позволяют полностью выполнить трехстороннее слияние при обновлении файла конфигурации. Вы можете подобраться, однако, с etckeeper . Etckeeper - это надстройка для APT, инструмента управления пакетами, используемого Debian и производными программами, который управляет /etcсистемой контроля версий (Bazaar, Darcs, Git, Mercurial); он был перенесен на другие системы, включая Yum в Fedora. Я рекомендую использовать etckeeper; это также отличный способ отслеживать изменения, которые вы вносите /etc.

Некоторые программы управляют своими файлами конфигурации с помощью ucf , но это не то, что вы можете контролировать как пользователь.

В более общем плане , когда у вас есть предка и две версии, вы можете сделать трехстороннее слияние с mergeутилитой поставляется с RCS или diff3 -mиз Diffutils .

Существует также множество интерактивных программ сравнения и слияния. Emacs и Vim имеют интерфейсы для этого, как и большинство diff зрителей .


1

Мой личный фаворит kdiff3- я не знаю, есть ли для него Ubuntu-версия. Согласно домашней странице он просто использует qt .

С помощью этого инструмента вы можете объединить два (или три) файла в новый. Либо выбрав сторону для каждого различия, либо вручную разрешив конфликт.


в настоящее время (15.04) в Ubuntu есть и то, kdiff3и другоеkdiff3-qt
mchid
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.