使用HomeBrew安装回滚软件到指定版本

HomeBrew是Mac OS下一个必备的软件包管理神器,用它来安装软件能省去不少的麻烦,因为它能自动帮你搞定一些软件包的依赖关系。稍微麻烦的是,在HomeBrew中,当使用brew upgrade命令的时候,会直接更新软件到最新的版本,而本身没有提供一个可以在升级某个软件之后再回滚到某个指定版本的功能。

就拿Tmux来说,我常常会在日常工作中用到它,但是Tmux的版本更新往往比较激进,作者仿佛不太考虑和之前版本的兼容性,而带来一些breaking changes。导致在某个新版本更新之后,配置文件的一些配置项直接在新版启动的时候报错。所以,我常常在不小心升级到最新版的时候,想要回退Tmux到之前的版本。

其实办法还是有的,下面介绍的方法,不止对Tmux回滚有效,对任何软件的版本回滚都有效。这里只是拿TMux来举个例子。

第一步: 删除已经更新到最新版本的TMux

1
$ brew uninstall tmux

第二步: 安装指定版本Tmux

1
2
$ brew install tmux@2.8
Error: No available formula with the name "tmux@2.8"

这一步有时候能成功,但有时候也许并不管用,所以如果不成功,我们还需要第三步的操作

第三步: 从HomeBrew仓库中安装

1
2
3
$ git clone git@github.com:Homebrew/homebrew-core.git
$ cd homebrew-core
$ git log master -- Formula/tmux.rb

这一步,我们需要先clone HomeBrew的仓库,然后从仓库中查找Tmux指定版本对应的git提交记录。找到指定版本对应的git commit hash,并复制下来。

第四步: 直接通过commit hash安装指定版本的TMux

1
$ brew install http://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-HASH>/Formula/tmux.rb

最后的操作

如果我们打算近期内都不更新Tmux,可以用pin命令,把Tmux“钉”在当前版本,防止下一次brew upgrade命令导致悲剧的发生:

1
$ brew pin tmux

通过这个命令,还可以列出哪些软件是被pin的:

1
$ brew list --pinned

此方法不但适用于Tmux,也适合任何HomeBrew管理的软件,通过git的commit hash,我们能方便回顾安装任何软件到任何指定版本,屡试不爽!

支持原创技术分享,据说打赏我的人,都找到了女朋友!