Иногда обновления пакетов из MELPA могут сломать некоторую часть emacs, и когда это произойдет, я бы хотел вернуться к использованию более старой версии пакета.
Прямо сейчас я могу сделать это двумя способами:
Я установил в emacs удаление файлов, перейдя в корзину, и когда я обновляю пакет, старая версия удаляется. Я могу получить старую версию и заменить одну в
~/.emacs.d/elpa
.Перейдите в репозиторий github пакета, который нарушил функциональность, извлеките более старую версию пакета, замените ту, которая была в
~/.emacs.d/elpa
gitub, перекомпилируйте файл (ы).
Оба эти способа включают в себя много ручной работы, которая перемещает вещи вокруг. Есть ли более простой (желательно автоматический) способ понизить версию пакетов, установленных из MELPA?
источник
M-x package-install-file
. Есть и другие способы управления пакетами, кроме ELPA / package.el, такие как el-get и quelpa , они могут использоваться без ELPA, возможно, они могут делать то, что вы хотите.M-x report-emacs-bug
(это также относится и к запросам на улучшение).Ответы:
Когда вы обновите свои пакеты через
M-x list-packages
интерфейс, после успешной установки пакета вам будет предложено удалить старый пакет. Не удаляйте их, чтобы они оставались на месте, и затем вы сможете позже удалить новый пакет через этот интерфейс.Мой текущий список пакетов показывает 4 версии magit, установленные в моем каталоге ~ / .emacs.d / elpa /.
Позже вы можете очистить старые версии с помощью ключа
~
(package-menu-mark-obsolete-for-deletion), чтобы отметить все устаревшие пакеты. Чтобы удалить определенную старую версию, перейдите к ее строке и нажмите,d
чтобы отметить их для удаления. После того, как вы отметили пакеты, вы будете использовать ихx
для выполнения действий как обычно.В Emacs 25 пометка всех пакетов для
U
функциональности pgrade автоматически устанавливает все старые пакеты для удаления и не запрашивает подтверждения после установки. Вы должны искать строки, которые начинаются с заглавной буквы "D", которую вы можете просто снять (лучше всего с помощью следующего макроса)Введите клавишу или аккорд слева от тире из следующих строк.
Если больше нет совпадений для поиска, макрос позвонит в звонок и остановится, так что вы можете
C-u 0 <F4>
снять отметку со всех пакетов, отмеченных для удаления. После этого вы можетеx
выполнить установку.Функция, которую я объявил измененной в моем комментарии, должна быть изменена так, как я пока не могу понять, так как важно, чтобы последний (cond) блок был успешным, чтобы не выполнять бесконечный цикл.
источник
(t (package-menu-mark-delete))
строкиpackage-menu--mark-upgrades-1
таким образом, чтобы первая строка представляла собой тест для переменной конфигурации или что-то, что возвращается,nil
если вы не хотите немедленно удалять старые пакетыpackage.el
исходный ответ, чтобы я мог принять ответ? Спасибо«Ядерный вариант» будет состоять в том, чтобы
package.el
полностью отказаться от него и вместо этого использовать менеджер пакетов, который я написалstraight.el
. Преимущество заключается в том, чтоstraight.el
пакеты устанавливаются путем клонирования их репозиториев Git, что упрощает использование любой версии, которую вы хотите. Кроме того,straight.el
предоставляет функциональные возможности для работы с ревизионными файлами блокировки, которые позволяют записывать точное состояние конфигурации управления пакетами до мельчайших деталей. Затем, в случае чрезвычайной ситуации, вы можете просто вернуть все пакеты к их заведомо исправным версиям.Эти виды операций, в общем, невозможны
package.el
, и они всегда будут невозможны из-за общего дизайна.В ответ на ваше желание избегать фиксации каждый раз, когда вы обновляете свои пакеты, это не обязательно с
straight.el
. Я бы порекомендовал написать файл блокировки версии и фиксировать его каждый раз, когда вы обновляете свои пакеты, так как это делает невозможным попадание в состояние, когда ваша конфигурация Emacs нарушается после обновления, и вы не знаете, как вернуться. Но вам не нужно этого делать, если вам нравится жить на грани.источник
Я нахожу простой способ понижения: управление собственным архивом melpa.
make
чтобы собрать пониженный пакетpackage-archives
.package-pinned-packages
для ограничения архива, откуда пакет должен быть загружен.источник
Многие люди предпочитают не связывать пакеты ELPA с контролем версий, но это пример того, почему я считаю, что вы должны это делать.
Отменить что-либо тривиально, если все это совершено.
В зависимости от состояния вышестоящих пакетов ELPA существует риск.
источник