Назад | Перейти на главную страницу

Устранение противоречивого конфликта в дереве / etc (etckeeper на основе Mercurial)

у меня есть /etc файловое дерево, которым управляет etckeeper, основанный на Mercurial. После запуска apt-get dist-upgrade, Я хочу пересмотреть изменения, внесенные обновлением.

Однако при выполнении

hg add $(hg status . --unknown --no-status)

Я получаю такой конфликт:

abort: file 'php5/apache2/conf.d' in dirstate clashes with 'php5/apache2/conf.d/05-opcache.ini'

hg status php5/apache2/conf.d

дает мне:

! php5/apache2/conf.d
? php5/apache2/conf.d/05-opcache.ini
? php5/apache2/conf.d/10-pdo.ini
? php5/apache2/conf.d/20-json.ini
? php5/apache2/conf.d/20-readline.ini

Мне это кажется противоречивым: если каталог php5/apache2/conf.d будет отсутствовать, как он может содержать новые (неверсированные) файлы ?!

Как я могу разрешить этот конфликт?

(Debian Linux, обновлен с 7.11 до 8.5; Mercurial 3.4.2)

Кажется пропавший (/etc/)php5/apache2/conf.d была символической ссылкой, которая была заменена каталогом.

Я поместил каталог в tar-архив, на всякий случай, и попробовал hg revert php5/apache2/conf.d, который дал (немецкая версия; извините, я забыл повторить с LANG=C):

Abbruch: Konnte symbolische Verknüpfung auf '../conf.d' nicht erzeugen: File exists: '/etc/php5/apach2e/conf.d'

Если hg revert пытается создать символическую ссылку, я предполагаю, что отсутствующий ресурс был символической ссылкой. Этот маленький танец сделал свое дело (дважды - для php5/apache2 и php5/cli):

mv conf.d conf.d-tmp
hg rm conf.d
hg commit conf.d -m 'Conflict resolution, part 1'
mv conf.d-tmp conf.d
hg commit conf.d -m 'Conflict resolution, part 2'

После этого я смог добавить все оставшиеся «неизвестные» ресурсы и удалить все оставшиеся «удаленные» ресурсы:

hg add $(hg status -un)
hg rm $(hg status -dn)