Czasami aktualizacje pakietów z MELPA mogą uszkodzić część emacsa, a kiedy to się stanie, chciałbym móc wrócić do korzystania ze starszej wersji pakietu.
W tej chwili mogę to zrobić na dwa sposoby:
Ustawiłem emacsa, aby usuwał pliki, przenosząc do kosza, a kiedy aktualizuję pakiet, starsza wersja jest niszczona. Mogę pobrać starszą wersję i wymienić ją w
~/.emacs.d/elpa
.Przejdź do repozytorium github pakietu, które zepsuło funkcjonalność, pobierz starszą wersję pakietu, zastąp tę
~/.emacs.d/elpa
z gitub, ponownie skompiluj bajt (-y) pliku (ów).
Oba te sposoby wymagają dużej ilości pracy ręcznej podczas przenoszenia rzeczy. Czy istnieje łatwiejszy (najlepiej automatyczny) sposób obniżenia poziomu pakietów zainstalowanych z MELPA?
package
package-repositories
Chakravarthy Raghunandan
źródło
źródło
M-x package-install-file
. Istnieją również inne sposoby zarządzania pakietami poza ELPA / package.el, takie jak el-get i quelpa , wydaje się, że można ich używać bez ELPA, może mogą zrobić to, co chcesz.M-x report-emacs-bug
(dotyczy to również próśb o ulepszenie).Odpowiedzi:
Po zaktualizowaniu pakietów za pomocą
M-x list-packages
interfejsu po pomyślnej instalacji pakietu pojawi się pytanie, czy chcesz usunąć stary pakiet. Nie usuwaj ich, aby pozostały na miejscu, a później możesz usunąć nowszy pakiet za pośrednictwem tego interfejsu.Moja obecna lista pakietów pokazuje 4 wersje magit zainstalowane w moim drzewie katalogów ~ / .emacs.d / elpa /.
Możesz wyczyścić stare wersje później za pomocą klawisza
~
(pakiet-menu-znak-przestarzałe-do-usunięcia), aby zaznaczyć wszystkie przestarzałe pakiety. Aby usunąć pewną starą wersję, przejdź do jej linii i naciśnij,d
aby zaznaczyć je do usunięcia. Po zaznaczeniu pakietów, których użyjeszx
do wykonania akcji w zwykły sposób.W Emacsie 25 zaznacz wszystkie pakiety dla
U
funkcji pgrade automatycznie ustawia wszystkie stare pakiety do usunięcia i nie wyświetla monitu o potwierdzenie po instalacji. Musisz poszukać linii rozpoczynających się od dużej litery „D”, którą możesz po prostu odznaczyć (najlepiej za pomocą poniższego makra)Wpisz klucz lub akord po lewej stronie myślnika w następujących wierszach.
Jeśli nie ma dalszych dopasowań do wyszukiwania, makro zadzwoni i zatrzyma się, aby można było
C-u 0 <F4>
odznaczyć wszystkie pakiety oznaczone do usunięcia. Następnie możeszx
wykonać instalację.Funkcja, którą zadeklarowałem jako zmienioną w moim komentarzu, musi zostać zmieniona w sposób, którego nie mogę jeszcze uchwycić, ponieważ ważne jest, aby ostatni blok (warunkowy) odniósł sukces, aby nie zapętlał się w nieskończoność.
źródło
(t (package-menu-mark-delete))
wiersze,package-menu--mark-upgrades-1
aby pierwszy wiersz był testem zmiennej konfiguracyjnej lub czymś, co zwraca,nil
gdy nie chcesz natychmiast usuwać starych pakietówpackage.el
oryginalnej odpowiedzi, aby zaakceptować odpowiedź? DziękiOpcję „jądrowy”, jak to było, byłoby porzucić
package.el
całkowicie i zamiast użyć menedżera pakietów, które napisałemstraight.el
. Zaletą byłoby to, żestraight.el
instaluje pakiety poprzez klonowanie repozytoriów Git, dzięki czemu korzystanie z dowolnej wersji jest proste. Ponadtostraight.el
zapewnia funkcjonalność do czynienia z plików blokujących rewizyjnych, które pozwalają nagrywać dokładny stan konfiguracji zarządzania pakietami w najdrobniejszych szczegółach. Następnie, w nagłych przypadkach, możesz po prostu przywrócić wszystkie pakiety do ich znanych dobrych wersji.Tego rodzaju operacje są na ogół niemożliwe
package.el
i zawsze będą niemożliwe ze względu na ogólny projekt.W odpowiedzi na Twoją chęć unikania dokonywania zmian przy każdej aktualizacji pakietów, nie jest to konieczne
straight.el
. Chciałbym polecić napisanie wersji pliku blokującego i popełnienie że za każdym razem zaktualizować pakietów, ponieważ to sprawia, że nie da się kiedykolwiek dostać się do stanu, w którym konfiguracja Emacs jest łamany po aktualizacji i nie wiesz, jak przywrócić. Ale nie musisz tego robić, jeśli lubisz żyć na krawędzi.źródło
Znajduję prosty sposób na obniżenie wersji: zarządzanie własnym archiwum Melpa.
make
aby zbudować obniżony pakietpackage-archives
.package-pinned-packages
aby ograniczyć archiwum, z którego pakiet powinien zostać pobrany.źródło
Wiele osób decyduje się nie zobowiązać pakietów ELPA do kontroli wersji, ale jest to przykład, dlaczego uważam, że powinieneś to zrobić.
Cofanie czegokolwiek jest trywialne, jeśli wszystko zostało popełnione.
W zależności od stanu wcześniejszych pakietów ELPA istnieje ryzyko.
źródło