Saya memiliki formula Homebrew yang ingin saya hapus / hapus beserta semua dependensinya, melewatkan paket yang menjadi sandaran paket lain (alias penghapusan paket Cascading dalam bahasa manajer paket).
misalnya paket Uninstall a
yang tergantung pada paket b
& c
, di mana paket d
juga tergantung pada paket c
. Hasilnya harus mencopot keduanya a
& b
, lewati c
.
Bagaimana saya bisa melakukan itu?
Pasti ada cara untuk menghapus paket tanpa meninggalkan sampah yang tidak perlu .
Jawaban:
EDIT:
Sepertinya masalah sekarang diselesaikan dengan menggunakan perintah eksternal yang disebut
brew rmdeps
ataubrew rmtree
.Untuk menginstal dan menggunakan, jalankan perintah berikut:
Lihat tautan di atas untuk informasi dan diskusi lebih lanjut.
Jawaban asli:
Tampaknya saat ini, tidak ada cara mudah untuk mencapai ini.
Namun, saya mengajukan masalah pada halaman GitHub Homebrew , dan seseorang menyarankan solusi sementara sampai mereka menambahkan perintah eksklusif untuk menyelesaikannya.
Ada perintah eksternal yang disebut
brew leaves
yang mencetak semua paket yang bukan dependensi dari paket lain.Jika Anda melakukan logis dan pada output dari
brew leaves
danbrew deps <package>
, Anda mungkin hanya mendapatkan daftar paket dependensi yatim, yang dapat Anda hapus secara manual setelahnya. Kombinasikan ini denganxargs
dan Anda akan mendapatkan apa yang Anda butuhkan, saya kira (belum diuji, jangan mengandalkan ini).EDIT: Seseorang baru saja menyarankan solusi yang sangat mirip, menggunakan
join
alih-alihxargs
:Lihat komentar tentang masalah yang disebutkan di atas untuk info lebih lanjut.
sumber
This command requires a keg argument
.brew rmtree
Skrip pihak ketiga sekarang tersedia dalam satu ketukan:brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
brew rm $(join <(brew leaves) <(brew deps FORMULA))
melakukan pekerjaan dengan baik. Anda hanya perlu menjalankannya lagi dan lagi sampai semua dependensi dihapus. Itu tidak dapat menghapus semuanya sekaligus karena dependensi saling bergantung satu sama lain.&& brew install brew-rmtree
perlu lagi.Tujuannya di sini adalah untuk menghapus paket yang diberikan dan dependensinya tanpa memutus dependensi paket lain. Saya menggunakan perintah ini:
Catatan: Diedit untuk mencerminkan komentar bermanfaat @ alphadogg.
sumber
--ignore-dependencies
untuk menghapus agar ini berfungsi.brew rmtree
tidak bekerja sama sekali . Dari tautan pada masalah itu saya menemukan rmrec yang sebenarnya berfungsi. Tuhan tahu mengapabrew
tidak memiliki ini sebagai perintah asli.sumber
[FORMULA]
lalu gunakan rmrec untuk menghapus semua dependensi itu secara rekursif dengan benar.rmrec
saat ini tidak menangani paket namespaced dengan sangat baik. Saya menggunakan sesuatu yang menariklinuxbrew/xorg/xorg
dan menghapus semuanya kecuali paket itu dan bahkan secara eksplisit menyebutkan paket itu tidak dapat menyelesaikannya dan tidak melakukan apa pun.rmrec
buruk. Itu tidak menangani ketergantungan sama sekali.rmtree
?rmrec
tidak menangani dependensi.God knows why brew doesn't have this as a native command.
=> Karena pengembang minuman memiliki sikap buruk. Mereka bahkan tidak mengizinkan orang untuk membuka masalah apa pun. Periksa github.com/Homebrew/brew , sekarang hanya ada kurang dari 20 masalah. Sejumlah kecil. Apakah itu hal yang baik? Tidak, ini sangat buruk.Berdasarkan jawaban @ jfmercer (koreksi diperlukan lebih dari komentar).
Hapus dependensi paket (tidak menghapus paket):
Hapus paket:
Instal ulang pustaka yang hilang:
Mencopot instalasi yang diuji
meld
setelah menemukan rilis MeldMerge .sumber
Menggunakan jawaban ini mengharuskan Anda membuat dan memelihara file yang berisi nama paket yang ingin Anda instal pada sistem Anda. Jika Anda belum memilikinya, gunakan perintah berikut dan hapus nama paket yang tidak ingin Anda instal.
Kemudian Anda dapat menghapus semua paket yang diinstal, tetapi paket yang tidak diinginkan dan dependensi yang tidak perlu dengan menjalankan perintah berikut
brew_clean
tersedia di sini: https://gist.github.com/cskeeters/10ff1295bca93808213dScript ini mendapatkan semua paket yang Anda tentukan di brew_packages dan semua ketergantungannya dan membandingkannya dengan output
brew list
dan akhirnya menghapus paket yang tidak diinginkan setelah memverifikasi daftar ini dengan pengguna.Pada titik ini jika Anda ingin menghapus paket
a
, Anda cukup menghapusnya dari file brew_packages kemudian jalankan kembalibrew_clean brew_packages
. Itu akan dihapusb
, tetapi tidakc
.sumber
brew clean -s
brew cleanup -s && brew cask cleanup
Anda bisa menggunakan pipa UNIX untuk ini
sumber
brew missing
yang akan memberi tahu Anda perintah apa yang perlu Anda jalankan untuk mendapatkannya kembaliSimpan skrip berikut sebagai pembuatan bir
Sekarang instal dengan perintah berikut
Sekarang jalankan
Contoh menggunakan gpg
sumber
Jawaban lain tidak berhasil untuk saya, tetapi ini berhasil (dalam
fish
shell):Karena
brew remove $p
gagal ketika beberapa paket lain bergantungp
.sumber
Fungsi Shell Bourne Yang Lebih Lengkap
Sudah ada beberapa jawaban bagus, tetapi beberapa sudah ketinggalan zaman dan tidak ada yang sepenuhnya lengkap. Secara khusus, sebagian besar dari mereka akan menghapus dependensi tetapi tetap terserah Anda untuk menghapus formula yang ditargetkan sebelumnya setelahnya. Satu kalimat yang diposkan juga bisa membosankan jika Anda ingin menghapus lebih dari satu rumus sekaligus.
Berikut adalah fungsi shell yang kompatibel dengan Bourne (tanpa Bashisme yang diketahui) yang mengambil daftar formula, menghapus dependensi masing-masing, menghapus semua salinan formula itu sendiri, dan kemudian menginstal ulang dependensi yang hilang.
Itu diuji pada Homebrew 1.7.4.
Peringatan
Ini berfungsi pada semua formula standar yang saya uji. Saat ini tidak menangani tong, tetapi juga tidak akan mengeluh keras jika Anda mencoba untuk menghapus tong dengan nama yang sama dengan formula standar (misalnya MacVim).
sumber
Jawaban @jfmercer harus dimodifikasi sedikit agar berfungsi dengan minuman saat ini, karena output dari
brew missing
telah berubah:sumber