大家好我叫乌图米,我会在这里陆续跟大家分享一些有的没的数码体验、软件技巧、系统知识,欢迎大家留言与我交流~如果你喜欢文章的内容,可以在文末点个赞 ,你的支持就是我最大的动力 !
这篇文章介绍一下 Homebrew 如何安装历史软件包。有两种方式,可以添加「homebrew-versions」仓库得到历史版本软件包,也可以主动搜寻历史版本的.rb安装文件进行安装。
如果你还不知道什么是 Homebrew,笔者这里有一篇介绍它的文章:乌图米:macOS Homebrew 马克?zhuanlan.zhihu.com
~ > brew search node
==> Formulae
libbitcoin-node node node-sass node@12 ? nodebrew nodenv
llnode node-build node@10 node_exporter nodeenv
==> Casks
font-ubuntu-mono-derivative-powerline nodeclipse
nodebox soundnode可以看到一共有三个node版本。有最新的node,也有两个历史版本node12和node10。直接安装对应的历史版本即可。
brew info node@12
brew install node@12
2 添加仓库「homebrew-versions」获取历史版本
顺便给出笔者介绍为 Homebrew 添加更多仓库的文章:乌图米:Homebrew Taps 更多仓库马克?zhuanlan.zhihu.com
~ > brew search alfred
==> Casks
alfred alfred2 alfred3值得注意的是,虽然仓库提供的是更多的历史版本,但也提供beta版本的内容。
3 根据git历史获取精准历史版本
如果需求是特别精确的软件包版本,那么很可能没有被任何仓库收录。这时候可以通过访问软件包安装文件.rb的历史版本,来安装对应时间的软件包。
原理是个啥p>
查看软件包的信息时,输出信息如下:
class When
…
url “https://deb.debian.org/debian/pool/main/w/when/when_1.1.38.orig.tar.gz”
sha256 “139834945142f5e3ea6b20f43ba740d30b4a87b42ce5767026094e633dca999f”
…
end
其实每次执行brew install指令时,Homebrew 做的事情就是去仓库里面找到对应的.rb文件,这就是安装软件包的执行文件。因此,只要有对应版本的.rb文件,就可以进行对应版本的软件包安装。
现在要做的是:找到历史版本的.rb文件,下载到本地;使用 Homebrew 直接执行这份.rb文件,进入历史版本的安装流程。熟悉git的盆友应该知道,这份文件是最新提交的版本。既然有最新提交的版本,当然有历史版本。点击右上角的「HIstory」按钮,查看历史版本。
第三种是直接主动修改当前.rb文件的url与sha256片段,欺瞒 Homebrew 进行安装。
目前以上三种方法的前两种,笔者都没有找到when这个软件包的历史版本。陷入沉思,应该与换源有很大关系。等回头搞清楚了再来更新。
brew install /Users/tommy/Downloads/when.rb # 注意这里是你下载文件的路径!「毫不意外」的回 错:第一,我替换的清华镜像源中没有该历史版本,不过它会自动转为开发者提供的下载链接;第二,文件的校验码不对,根据文件期望得到的值与实际值不吻合。
总结一下,上面三种方法都是利用旧的本地.rb 文件,实现旧版本的安装。其中第三种是比较通用的,因为你可以「耍赖」地无限尝试。尤其是当有依赖包指定了具体的版本 ,就更容易了。
4 锁定软件包
好不容易安装好了历史版本的软件包,当然最好是锁定它,避免其被更新。使用pin指令锁定以安装的软件包。之后不会在upgrade指令中更新被锁定的软件包。
brew ls –pinned # 查看当前锁定的软件包版本使用unpin指令解除软件包的锁定。然后可以正常在outdated和upgrade指令中查看和更新落伍的软件包。

brew unpin when # 解锁
尤其注意,如果你对这个软件包的依赖是长期的,那么尽量锁定;如果只是暂时的需求,可以不用锁定。
不过,可以看到,upgrade指令发现pinned软件包时,将直接提示 错。这说明 Homebrew 是非常不提倡固定软件包版本的。
5 注意事项
有一些需要注意的地方:不建议使用历史软件包,Homebrew 也是同样的态度。更新总是有原因的,尽量向新版本看齐。
如果已经安装了更新版本的软件包、再安装旧版,是不可以覆盖安装的。安全的操作是先brew unlink取消软件包的关联,再卸载新版本软件包,最后尝试安装更旧的版本。
理论上来说,只要可以获取某个时期的安装包及其对应的校验码,都是可以甩给 Homebrew 安装的。但获取正确的校验码及文件,还是需要参考仓库的提交历史。
「耍赖」方法一时爽,一直耍赖小心出问题 。
共同学习,武汉加油!
相关资源:菜鸟耍人专用-软件测试其他资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!