Parfois, les mises à jour de packages de MELPA peuvent casser une partie d'emacs et lorsque cela se produit, j'aimerais pouvoir revenir à l'utilisation d'une ancienne version du package.
En ce moment, je peux le faire de deux manières:
J'ai défini emacs pour supprimer des fichiers en passant à la corbeille et lorsque je mets à jour un package, l'ancienne version est mise à la corbeille. Je peux récupérer l'ancienne version et remplacer celle de
~/.emacs.d/elpa
.Accédez au référentiel github du package qui a cassé la fonctionnalité, récupérez une version plus ancienne du package, remplacez celle-ci
~/.emacs.d/elpa
par celle de gitub, recompilez les fichiers en octets.
Ces deux méthodes impliquent beaucoup de travail manuel pour déplacer les choses. Existe-t-il un moyen plus simple (de préférence automatique) de rétrograder les packages installés à partir de MELPA?
la source
M-x package-install-file
. Il existe également d'autres façons de gérer les packages en plus de ELPA / package.el, tels que el-get et quelpa , ils semblent pouvoir être utilisés sans ELPA, peut-être qu'ils peuvent faire ce que vous voulez.M-x report-emacs-bug
(c'est aussi pour les demandes d'amélioration).Réponses:
Lorsque vous mettez à jour vos packages via l'
M-x list-packages
interface, après l'installation réussie du package, il vous sera demandé si vous souhaitez supprimer l'ancien package. Ne les supprimez pas pour qu'ils restent en place et vous pourrez ensuite supprimer le package le plus récent via cette interface.Ma liste de paquets actuelle montre 4 versions de magit installées dans mon arborescence de répertoires ~ / .emacs.d / elpa /.
Vous pouvez nettoyer les anciennes versions plus tard avec la clé
~
(package-menu-mark-obsolete-for-deletion) pour marquer tous les packages obsolètes. Pour supprimer une certaine ancienne version, déplacez-vous sur sa ligne et appuyez surd
pour les marquer pour suppression. Après avoir marqué les packages que vous utiliseriezx
pour exécuter les actions comme d'habitude.Dans Emacs 25, la marque tous les packages pour la
U
fonctionnalité pgrade définit automatiquement tous les anciens packages pour la suppression et ne demande pas de confirmation après l'installation. Vous devez rechercher les lignes qui commencent par un "D" majuscule, que vous pouvez simplement décocher (mieux avec la macro suivante)Tapez la clé ou l'accord à gauche du tiret à partir des lignes suivantes.
S'il n'y a pas d'autres correspondances pour la recherche, la macro sonnera et s'arrêtera, vous pouvez
C-u 0 <F4>
donc décocher tous les packages marqués pour suppression. Après cela, vous pouvezx
exécuter les installations.La fonction que j'ai déclarée modifiée dans mon commentaire doit être modifiée d'une manière que je ne peux pas encore comprendre, car il est important que le dernier bloc (cond) soit réussi afin de ne pas boucler sans fin.
la source
(t (package-menu-mark-delete))
lignespackage-menu--mark-upgrades-1
afin que la première ligne soit un test pour une variable de configuration ou quelque chose qui retournenil
lorsque vous ne souhaitez pas supprimer immédiatement les anciens packagespackage.el
la réponse d'origine, afin que je puisse accepter la réponse? MerciLa « option nucléaire », pour ainsi dire, serait de fossé
package.el
entièrement et utiliser plutôt le gestionnaire de paquets que je l' ai écrit,straight.el
. L'avantage serait d'straight.el
installer les packages en clonant leurs référentiels Git, ce qui rendrait trivial l'utilisation de la version que vous souhaitez.straight.el
Fournit également des fonctionnalités pour gérer les fichiers de verrouillage de révision, qui vous permettent d'enregistrer l'état exact de votre configuration de gestion des packages dans les moindres détails. Ensuite, en cas d'urgence, vous pouvez simplement rétablir tous les packages dans leurs versions connues.Ces types d'opérations sont, en général, impossibles avec
package.el
, et elles seront toujours impossibles, en raison de la conception globale.En réponse à votre désir d'éviter de faire un commit à chaque fois que vous mettez à jour vos packages, cela n'est pas nécessaire avec
straight.el
. Je recommanderais d' écrire un fichier de verrouillage de version et de le valider chaque fois que vous mettez à jour vos packages, car cela rend impossible de se retrouver dans un état où votre configuration Emacs est rompue après une mise à niveau et vous ne savez pas comment revenir. Mais vous n'avez pas à le faire si vous aimez vivre la vie à la limite.la source
Je trouve un moyen simple de rétrograder: la gestion de votre propre archive melpa.
make
pour construire le package déclassépackage-archives
liste.package-pinned-packages
pour restreindre l'archive à partir de laquelle le package doit être téléchargé.la source
Beaucoup de gens choisissent de ne pas valider les packages ELPA pour le contrôle de version, mais c'est un exemple de la raison pour laquelle je pense que vous devriez le faire.
Inverser quoi que ce soit est trivial si tout est engagé.
Dépendre de l'état des colis ELPA en amont est un risque.
la source