Skip to content

备份你的homebrew

Published: at 08:06 AM

前言

Homebrew 应该是macOS上最常用的包管理器了,在电脑迁移的过程中,我们可能因为使用软件的习惯,都会将之前下载的软件重新下载一遍,这个时候需要一个文件来记录你之前通过brew下载的软件/包。 通过这个思路,可以将homebrew下载的软件用 as code 的形式保存下来,后续方便管理。

思路

当想到怎么获取brew下载的软件/包时,首先想到的便是使用brew list命令,这个命令会列出brew安装的所有安装过的 Formulae / casks。以下是我输出的结果。

brew list
==> Formulae
ack			libde265		mpfr
aom			libdicom		msgpack
bash-completion		libevent		ncurses
brotli			libexif			neovim
c-ares			libgcrypt		nettle
ca-certificates		libgpg-error		node
cairo			libheif			npth
cfitsio			libidn			nspr
cgif			libidn2			nss
fftw			libimagequant		nvm
fontconfig		libksba			oniguruma
freetype		liblqr			open-mpi
fribidi			libmatio		openexr
fzf			libmpc			openjpeg
gcc			libnghttp2		openldap
gdk-pixbuf		libomp			openslide
gettext			libpng			openssl@3
ghostscript		libraw			orc
giflib			librsvg			p11-kit
git			libspng			pango
glib			libtasn1		pcre
gmp			libtermkey		pcre2
gnupg			libtiff			pinentry
gnutls			libtool			pixman
go			libunistring		pmix
gpgme			libusb			poppler
graphite2		libuv			[email protected]
harfbuzz		libvmaf			readline
hdf5			libvterm		shared-mime-info
highway			libx11			sqlite
hwloc			libxau			telnet
icu4c			libxcb			tig
imagemagick		libxdmcp		tree
imath			libxext			tree-sitter
isl			libxml2			unbound
jasper			libxrender		unibilium
jbig2dec		little-cms2		uthash
jpeg-turbo		luajit			vips
jpeg-xl			luv			webp
jq			lz4			x265
libaec			lzo			xorgproto
libarchive		m4			xz
libassuan		mozjpeg			zsh
libb2			mpdecimal		zstd

==> Casks
apifox			keycastr		sfm
arc			keyclu			snipaste
dingtalk		obs			spotify
google-chrome		orbstack		visual-studio-code
iterm2			picgo			wechat
jetbrains-toolbox	raycast			xcodes

然后参照这篇文章使用这个办法来备份和安装brew list

brew list > brew_programs_list.txt
xargs brew install < brew_programs_list.txt

这里可以看到,casks 基本上没什么问题,但是 Formulae 里会看到很多不是自己主动下载的包,他们之间有相互依赖的关系。

另一种推荐的方法

在这篇文章中看到了另一种思路来备份 Restore, Clone or Backup your Homebrew Setup 输出的效果比直接 brew list 要简洁得多。

brew tap Homebrew/bundle
brew bundle dump
# 这里会在当前文件夹内创建一个名叫 Brewfile 的文件
# 再使用这个命令重新来安装
brew bundle

我的brewfile直接备份在Github上。可以看到通过这种方式备份出来的 formulae 比使用 brew list 来得更加干净(这里是指这里的包是我当时主动安装的,没有其他额外的 formulae 依赖。