【轉】brew 更新問題


為什么要定期更新
我發現不少人都不會經常更新,或者只在必須用某個工具的新版本的時候才更新。他們的看法是,更新有可能產生一些意外的問題,反正當前環境足夠穩定可以用,干嘛自找麻煩呢?

這個看法對也不對。對是因為,更新產生的潛在問題不可避免。不對是因為總有一天你需要升級的,也許是為了某個工具的新特性,也許是為了修復軟件的漏洞,也許你安裝的包非要依賴另一個包的新版本,等等。如果隔了很長一段時間才升級,那潛在的小問題可能就會變成大問題。

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

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

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

每次更新的包很少,更新風險也小。

更容易發現不需要的包,便於清理,不為不需要的東西買單。

定期清理舊版本,釋放空間。

更新流程其實都差不多,下面列一下我常用的命令。

更新 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 unpinFORMULA # 鎖定某個包 brew unpinFORMULA # 取消鎖定
其他幾個常用命令
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 往往有兩個原因,害怕潛在的風險和對工具的不熟悉,我之前也是這樣。寫這篇文章最開始是為了幫我記錄常用的命令方便以后查閱的。希望它也能幫到你。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM