你應該按期更新 Homebrew

TL;DR

這篇文章是關於按期更新 Homebrew 的話題。它會告訴你按期更新的好處,經常使用的命令,以及用 brew pin 儘量無痛地更新。git

爲何要按期更新

我發現很多人都不會常常更新,或者只在必須用某個工具的新版本的時候才更新。他們的見解是,更新有可能產生一些意外的問題,反正當前環境足夠穩定能夠用,幹嗎自找麻煩呢?github

這個見解對也不對。對是由於,更新產生的潛在問題不可避免。不對是由於總有一天你須要升級的,也許是爲了某個工具的新特性,也許是爲了修復軟件的漏洞,也許你安裝的包非要依賴另外一個包的新版本,等等。若是隔了很長一段時間才升級,那潛在的小問題可能就會變成大問題。數據庫

另外一個有意思的現象是,當碰到比較破壞性的事情,好比 Mac OS 大版本更新後,不少人會選擇重裝 Homebrew 而後順帶安裝最新版的包。不多人會去裝一個指定的舊版本(除了特殊項目須要)。這說明他們不是不想用新版本,而是不想痛苦地更新。緩存

既然總有一天須要更新,而更新帶來問題不可避免,那爲何不更新得頻繁點呢?這個道理跟 Git 的衝突解決有類似性。長時間不 pull/push 的代碼更容易產生衝突,一個解決方法就是頻繁地 commit & merge 。安全

我如今試着一個月更新一次,兩次下來發現這些好處:bash

  1. 每次更新的包不多,更新風險也小。工具

  2. 更容易發現不須要的包,便於清理,不爲不須要的東西買單。ui

  3. 按期清理舊版本,釋放空間。code

更新流程其實都差很少,下面列一下我經常使用的命令。orm

更新 Homebrew

要獲取最新的包的列表,首先得更新 Homebrew 本身。這能夠用 brew update 辦到。

brew update

完後會顯示能夠更新的包列表,其中打鉤的是已經安裝的包。輸出相似下面這樣:

Updated Homebrew from fe93aa3 to 6ae64c3.
Updated 1 tap (homebrew/versions).
==> Updated Formulae
awscli      cmake ✔     homebrew/versions/libmongoclient-legacy

更新包 (formula)

更新以前,我會用 brew outdated 查看哪些包能夠更新。

brew outdated

而後就能夠用 brew upgrade 去更新了。Homebrew 會安裝新版本的包,但舊版本仍然會保留。

brew upgrade             # 更新全部的包
brew upgrade $FORMULA    # 更新指定的包

清理舊版本

通常狀況下,新版本安裝了,舊版本就不須要了。我會用 brew cleanup 清理舊版本和緩存文件。Homebrew 只會清除比當前安裝的包更老的版本,因此不用擔憂有些包沒更新但被刪了。

brew cleanup             # 清理全部包的舊版本
brew cleanup $FORMULA    # 清理指定包的舊版本
brew cleanup -n          # 查看可清理的舊版本包,不執行實際操做

這樣一套下來,該更新的都更新了,舊版本也被清理了。

鎖定不想更新的包

若是常常更新的話,brew update 一次更新全部的包是很是方便的。但咱們有時候會擔憂自動升級把一些不但願更新的包更新了。數據庫就屬於這一類,尤爲是 PostgreSQL 跨 minor 版本升級都要遷移數據庫的。咱們更但願找個時間單獨處理它。這時可用 brew pin 去鎖定這個包,而後 brew update 就會略過它了。

brew pin $FORMULA      # 鎖定某個包
brew unpin $FORMULA    # 取消鎖定

其餘幾個經常使用命令

brew info 能夠查看包的相關信息,最有用的應該是包依賴和相應的命令。好比 Nginx 會提醒你怎麼加 launchctl ,PostgreSQL 會告訴你如何遷移數據庫。這些信息會在包安裝完成後自動顯示,若是忘了的話能夠用這個命令很方便地查看。

brew info $FORMULA    # 顯示某個包的信息
brew info             # 顯示安裝了包數量,文件數量,和總佔用空間

brew deps 能夠顯示包的依賴關係,我經常使用它來查看已安裝的包的依賴,而後判斷哪些包是能夠安全刪除的。

brew deps --installed --tree    # 查看已安裝的包的依賴,樹形顯示

輸出以下:

elixir (required dependencies)
└── :erlang

wxmac (required dependencies)
├── jpeg
├── libpng
│   └── xz
└── libtiff
    └── jpeg

還有不少有用的命令和參數,沒事 man brew 一下能夠漲很多知識。

小結

不想更新 Homebrew 每每有兩個緣由,懼怕潛在的風險和對工具的不熟悉,我以前也是這樣。寫這篇文章最開始是爲了幫我記錄經常使用的命令方便之後查閱的。但願它也能幫到你。

參考資料

Keeping Your Homebrew Up to Date
Homebrew FAQ

相關文章
相關標籤/搜索