如何快速回滚一个升级失败的包?

比如说,今天我刚刚升级了 Ivy

ivy-20180705.807		->		ivy-20180712.1301

并且清空了回收站。然后发现出了一点小问题,如何快速找回老的包 ivy-20180705.807 呢?

相关问题

问题是要如何去 github 上找到 ivy-20180705.807 对应的 commit id 呢?


PS ivy-20180705.807 来自 package-desc-full-name

去读了一波源码,应该可以这么解决

(package-install
 (package-desc-create :name "ivy"
                      :version '(20180705 807)
                      :dir 'builtin
                      :kind 'tar
                      :archive "melpa"))

有的包需要 name 'symbol + kind 'single

(package-install
 (package-desc-create :name 'projectile
                      :version '(20180709 1217)
                      :dir 'builtin
                      :kind 'single
                      :archive "melpa"
                      ))
2 个赞

package.el 没有专门的支持,而且官方 Melpa 也不可能做到,因为 Melpa 甚至都不保存旧版本:

# 当前最新版本
~ $ curl -sI https://melpa.org/packages/ivy-20180712.1301.tar | head -1
HTTP/1.1 200 OK
# 旧版本
~ $ curl -sI https://melpa.org/packages/ivy-20180705.807.tar | head -1
HTTP/1.1 404 Not Found

尽管 Melpa 的 Emacs China 镜像会保存旧版本,其它的 ELPA,像 GNU ELPA 和 Org ELPA 也会保存旧版本。

原来 Melpa 上有显示 Commit 的,不过最近出了问题。

另外,根据时间点应该也能大致推算出是哪个 Commit,因为这个时间点好像是从Commit 的时间点来的。

是的,还是镜像大法好👍