у меня есть /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)