Я недавно обновил Ubuntu 12.04 до 12.10, и в один прекрасный момент он столкнулся с конфликтом конфигурационного файла Apache в apache2.conf
. Я не дал мне опции слияния в тот момент, поэтому я просто отклонил новый файл, и установщик сохранил новый файл как apache2.conf.dpkg-dist
.
Я могу различить два файла diff apache2.conf apache2.conf.dpkg-dist
и получить только строки, которые отличаются. Но я хочу вручную объединить два типа, например, как я разрешаю конфликты слияния в SVN или git. Как я могу это сделать?
Ответы:
Используйте,
vimdiff
если хотитеvim
. В остальномdiffuse
прекрасно работает.источник
Контроль версий имеет больше информации, когда он разрешает конфликты: у него есть не только ваша версия и версия другого парня, но и общий предок, и, следовательно, он может выполнять трехстороннее слияние . Здесь общим предком является исходная версия файла конфигурации в дистрибутиве или официальная версия, которую вы в последний раз объединили с вашими изменениями.
К сожалению, ни Ubuntu, ни какой-либо другой крупный дистрибутив, о котором я знаю, не позволяют полностью выполнить трехстороннее слияние при обновлении файла конфигурации. Вы можете подобраться, однако, с etckeeper . Etckeeper - это надстройка для APT, инструмента управления пакетами, используемого Debian и производными программами, который управляет
/etc
системой контроля версий (Bazaar, Darcs, Git, Mercurial); он был перенесен на другие системы, включая Yum в Fedora. Я рекомендую использовать etckeeper; это также отличный способ отслеживать изменения, которые вы вносите/etc
.Некоторые программы управляют своими файлами конфигурации с помощью ucf , но это не то, что вы можете контролировать как пользователь.
В более общем плане , когда у вас есть предка и две версии, вы можете сделать трехстороннее слияние с
merge
утилитой поставляется с RCS илиdiff3 -m
из Diffutils .Существует также множество интерактивных программ сравнения и слияния. Emacs и Vim имеют интерфейсы для этого, как и большинство diff зрителей .
источник
Мой личный фаворит
kdiff3
- я не знаю, есть ли для него Ubuntu-версия. Согласно домашней странице он просто использует qt .С помощью этого инструмента вы можете объединить два (или три) файла в новый. Либо выбрав сторону для каждого различия, либо вручную разрешив конфликт.
источник
kdiff3
и другоеkdiff3-qt