Bagaimana cara saya menginstal versi formula tertentu dalam homebrew? Sebagai contoh, postgresql-8.4.4 bukan yang terbaru 9.0.
Bagaimana cara saya menginstal versi formula tertentu dalam homebrew? Sebagai contoh, postgresql-8.4.4 bukan yang terbaru 9.0.
Jawaban:
TLDR: brew install postgresql@8.4.4
Lihat jawaban di bawah untuk detail lebih lanjut.
* ( Saya telah mengedit ulang jawaban saya untuk memberikan alur kerja yang lebih menyeluruh untuk menginstal / menggunakan versi perangkat lunak yang lebih lama dengan homebrew. Jangan ragu untuk menambahkan catatan jika Anda menemukan versi lama lebih baik. )
Mari kita mulai dengan kasus paling sederhana:
Ketika homebrew menginstal formula baru, itu menempatkannya di direktori berversi seperti /usr/local/Cellar/postgresql/9.3.1
. Hanya tautan simbolis ke folder ini yang kemudian diinstal secara global. Pada prinsipnya, ini membuatnya cukup mudah untuk beralih di antara dua versi yang diinstal. (*)
Jika Anda telah menggunakan homebrew lebih lama dan tidak pernah menghapus versi lama (menggunakan, misalnya brew cleanup
), kemungkinan beberapa versi lama dari program Anda mungkin masih ada. Jika Anda hanya ingin mengaktifkan versi sebelumnya, brew switch
adalah cara termudah untuk melakukan ini.
Periksa dengan brew info postgresql
(atau brew switch postgresql <TAB>
) apakah versi yang lebih lama diinstal:
$ brew info postgresql
postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M)
Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M) *
Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
# … and some more
Kami melihat bahwa beberapa versi yang lebih lama sudah diinstal. Kami dapat mengaktifkannya menggunakan brew switch
:
$ brew switch postgresql 9.1.5
Cleaning /usr/local/Cellar/postgresql/9.1.5
Cleaning /usr/local/Cellar/postgresql/9.3.2
384 links created for /usr/local/Cellar/postgresql/9.1.5
Mari kita periksa apa yang diaktifkan:
$ brew info postgresql
postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M) *
Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M)
Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
# … and some more
Perhatikan bahwa bintang *
telah pindah ke versi yang baru diaktifkan
(*) Harap dicatat bahwa brew switch
hanya berfungsi selama semua dependensi dari versi yang lebih lama masih ada. Dalam beberapa kasus, pembangunan kembali versi yang lebih lama mungkin diperlukan. Oleh karena itu, menggunakan brew switch
sebagian besar berguna ketika seseorang ingin beralih di antara dua versi yang tidak terlalu berjauhan.
Khusus untuk proyek perangkat lunak yang lebih besar, sangat mungkin ada permintaan yang cukup tinggi untuk beberapa versi utama (yang berpotensi tidak kompatibel dengan API) dari perangkat lunak tertentu. Pada Maret 2012, Homebrew 0.9 menyediakan mekanisme untuk ini: brew tap
& repositori versi homebrew .
Repositori versi itu dapat menyertakan backports dari versi yang lebih lama untuk beberapa formula. (Sebagian besar hanya yang besar dan terkenal, tetapi tentu saja mereka juga akan memiliki beberapa formula untuk postgresql.)
brew search postgresql
akan menunjukkan kepada Anda ke mana harus mencari:
$ brew search postgresql
postgresql
homebrew/versions/postgresql8 homebrew/versions/postgresql91
homebrew/versions/postgresql9 homebrew/versions/postgresql92
Kita cukup menginstalnya dengan mengetik
$ brew install homebrew/versions/postgresql8
Cloning into '/usr/local/Library/Taps/homebrew-versions'...
remote: Counting objects: 1563, done.
remote: Compressing objects: 100% (943/943), done.
remote: Total 1563 (delta 864), reused 1272 (delta 620)
Receiving objects: 100% (1563/1563), 422.83 KiB | 339.00 KiB/s, done.
Resolving deltas: 100% (864/864), done.
Checking connectivity... done.
Tapped 125 formula
==> Downloading http://ftp.postgresql.org/pub/source/v8.4.19/postgresql-8.4.19.tar.bz2
# …
Catatan bahwa ini telah secara otomatis disadap itu homebrew/versions
keran. (Periksa dengan brew tap
, hapus dengan brew untap homebrew/versions
.) Berikut ini akan menjadi setara:
$ brew tap homebrew/versions
$ brew install postgresql8
Selama formula versi yang di-backport tetap up-to-date, pendekatan ini mungkin merupakan cara terbaik untuk menangani perangkat lunak yang lebih lama.
Pendekatan berikut sebagian besar didaftar untuk kelengkapan. Keduanya mencoba menghidupkan kembali beberapa rumus undead dari repositori brew. Karena perubahan dependensi, perubahan API dalam spesifikasi rumus atau hanya perubahan dalam URL unduhan, hal-hal mungkin atau mungkin tidak berfungsi.
Karena seluruh direktori rumus adalah repositori git, seseorang dapat menginstal versi spesifik menggunakan perintah plain git. Namun, kita perlu menemukan cara untuk mendapatkan komit di mana versi lama tersedia.
a) masa bersejarah
Antara Agustus 2011 dan Oktober 2014 , homebrew memiliki brew versions
perintah, yang meludahkan semua versi yang tersedia dengan hash SHA masing-masing. Pada Oktober 2014, Anda harus melakukan brew tap homebrew/boneyard
sebelum dapat menggunakannya. Seperti yang disarankan oleh nama keran, Anda mungkin harus melakukan ini sebagai upaya terakhir.
Misalnya
$ brew versions postgresql
Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
https://github.com/Homebrew/homebrew-versions
9.3.2 git checkout 3c86d2b Library/Formula/postgresql.rb
9.3.1 git checkout a267a3e Library/Formula/postgresql.rb
9.3.0 git checkout ae59e09 Library/Formula/postgresql.rb
9.2.4 git checkout e3ac215 Library/Formula/postgresql.rb
9.2.3 git checkout c80b37c Library/Formula/postgresql.rb
9.2.2 git checkout 9076baa Library/Formula/postgresql.rb
9.2.1 git checkout 5825f62 Library/Formula/postgresql.rb
9.2.0 git checkout 2f6cbc6 Library/Formula/postgresql.rb
9.1.5 git checkout 6b8d25f Library/Formula/postgresql.rb
9.1.4 git checkout c40c7bf Library/Formula/postgresql.rb
9.1.3 git checkout 05c7954 Library/Formula/postgresql.rb
9.1.2 git checkout dfcc838 Library/Formula/postgresql.rb
9.1.1 git checkout 4ef8fb0 Library/Formula/postgresql.rb
9.0.4 git checkout 2accac4 Library/Formula/postgresql.rb
9.0.3 git checkout b782d9d Library/Formula/postgresql.rb
Seperti yang Anda lihat, disarankan untuk tidak menggunakannya. Homebrew mengeluarkan semua versi yang dapat ditemukan dengan heuristik internal dan menunjukkan kepada Anda cara untuk mengambil formula lama. Ayo kita coba.
# First, go to the homebrew base directory
$ cd $( brew --prefix )
# Checkout some old formula
$ git checkout 6b8d25f Library/Formula/postgresql.rb
$ brew install postgresql
# … installing
Sekarang setelah versi postgresql yang lebih lama terinstal, kita dapat menginstal ulang formula terbaru untuk menjaga repositori kita tetap bersih:
$ git checkout -- Library/Formula/postgresql.rb
brew switch
adalah teman Anda untuk berubah antara yang lama dan yang baru.
b) zaman prasejarah
Untuk kebutuhan khusus, kami juga dapat mencoba menggali sendiri melalui repo homebrew.
$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
git log -S
mencari semua komit yang stringnya '8.4.4'
ditambahkan atau dihapus dalam file Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb
. Kami mendapat dua komitmen sebagai hasilnya.
commit 7dc7ccef9e1ab7d2fc351d7935c96a0e0b031552
Author: Aku Kotkavuo
Date: Sun Sep 19 18:03:41 2010 +0300
Update PostgreSQL to 9.0.0.
Signed-off-by: Adam Vandenberg
commit fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
Author: David Höppner
Date: Sun May 16 12:35:18 2010 +0200
postgresql: update version to 8.4.4
Tentunya, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
adalah komit yang kami minati. Karena komit ini sudah cukup tua, kami akan mencoba menurunkan versi pemasangan homebrew yang lengkap (dengan cara itu, API rumus kurang lebih dijamin valid):
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
Anda dapat melewati perintah terakhir untuk menyimpan referensi di repositori git Anda.
Satu catatan: Saat memeriksa komit yang lebih lama, Anda menurunkan versi instalasi homebrew untuk sementara waktu. Jadi, Anda harus berhati-hati karena beberapa perintah dalam homebrew mungkin berbeda dengan versi terbaru.
Ini tidak terlalu sulit dan Anda kemudian dapat mengunggahnya ke repositori Anda sendiri. Dulu versi Homebrew , tetapi sekarang dihentikan.
Jika Anda ingin menyimpan versi tertentu, katakan postgresql, di sekitar dan menghentikan pembaruan dari saat Anda melakukan brew update; brew upgrade
prosedur alami , Anda dapat menyematkan rumus:
$ brew pin postgresql
Rumus yang disematkan didaftar /usr/local/Library/PinnedKegs/
dan setelah Anda ingin memasukkan perubahan dan pembaruan terbaru, Anda dapat melepaskan sematan lagi:
$ brew unpin postgresql
git checkout fa992 -- Library/Formula/postgresql.rb
. Setelah selesai, Anda dapat membatalkan perubahan menggunakan rumus git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb
.
brew update
membuat repo Git-nya.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
, maka Anda dapat menggunakan git checkout 4cce79d -- Formula/go.rb
dan HOMEBREW_NO_AUTO_UPDATE=1 brew install go
.
Sekarang Homebrew / versi telah ditinggalkan, Homebrew / core mendukung banyak versi formula dengan format penamaan yang baru.
Untuk menginstal versi tertentu, misalnya postgresql 9.5 Anda cukup menjalankan:
$ brew install postgresql@9.5
Untuk daftar versi yang tersedia, jalankan pencarian dengan @:
$ brew search postgresql@
==> Searching local taps...
postgresql@10.1 ✔ postgresql@9.4 postgresql@9.5 postgresql@9.6
fatal: Not a git repository (or any of the parent directories): .git
. Saya hanya cd
ke direktori saja (tanpa FORMULANAME.rb), lalu lakukangit checkout 120938
cd /usr/local
dulu.
brew unlink FORMULANAME
brew versions <formula>
tidak didukung lagi.
brew link --force postgresql@9.5
. Jika Anda sudah menginstal versi yang lebih baru dan ingin versi yang lebih lama menjadi default Anda, Anda akan memerlukannya juga --overwrite
di sana.
Sekarang ada cara yang jauh lebih mudah untuk menginstal versi formula yang lebih lama yang sebelumnya Anda instal. Cukup gunakan
brew switch [formula] [version]
Misalnya, saya berganti secara teratur antara Node.js 0.4.12 dan 0.6.5:
brew switch node 0.4.12
brew switch node 0.6.5
Karena brew switch
hanya mengubah symlink, itu sangat cepat. Lihat dokumentasi lebih lanjut tentang Wiki Homebrew di bawah Perintah Eksternal .
brew switch
bergantung pada versi yang dicari yang sudah diinstal. Sayangnya, jawaban yang diterima saat ini sangat tidak membantu, berbelit-belit, dan ketinggalan zaman. Ada yang lebih baik jawaban di bawah ini yang jauh lebih bermanfaat.
Pembaruan: 15/1/2015
brew install <url>
(mungkin harus brew unlink
terlebih dahulu, misalnya brew unlink docker
)brew switch docker 1.3.3
brew switch docker 1.4.1
Dari intisari ini
brew update
brew versions FORMULA
cd `brew --prefix`
git checkout HASH Library/Formula/FORMULA.rb # use output of "brew versions"
brew install FORMULA
brew switch FORMULA VERSION
git checkout -- Library/Formula/FORMULA.rb # reset formula
## Example: Using Subversion 1.6.17
#
# $ brew versions subversion
# 1.7.3 git checkout f8bf2f3 /usr/local/Library/Formula/subversion.rb
# 1.7.2 git checkout d89bf83 /usr/local/Library/Formula/subversion.rb
# 1.6.17 git checkout 6e2d550 /usr/local/Library/Formula/subversion.rb
# 1.6.16 git checkout 83ed494 /usr/local/Library/Formula/subversion.rb
# 1.6.15 git checkout 809a18a /usr/local/Library/Formula/subversion.rb
# 1.6.13 git checkout 7871a99 /usr/local/Library/Formula/subversion.rb
# 1.6.12 git checkout c99b3ac /usr/local/Library/Formula/subversion.rb
# 1.6.6 git checkout 8774131 /usr/local/Library/Formula/subversion.rb
# 1.6.5 git checkout a82e823 /usr/local/Library/Formula/subversion.rb
# 1.6.3 git checkout 6b6d369 /usr/local/Library/Formula/subversion.rb
# $ cd `brew --prefix`
# $ git checkout 6e2d550 /usr/local/Library/Formula/subversion.rb
# $ brew install subversion
# $ brew switch subversion 1.6.17
# $ git checkout -- Library/Formula/subversion.rb
brew install <url>
, brew unlink <formulaname>
. Kalau tidak, ini adalah cara paling sederhana dan paling ringkas (sejauh ini) untuk beralih ke versi tertentu dari formula.
Raw
tombol pada file apa ?!
brew log <formula>
Sejalan dengan saran @ halfcube, ini bekerja dengan sangat baik:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
package@version
git log master -- Formula/PACKAGENAME.rb
untuk mendapatkan histori komit, periksa komit yang benar, dan kemudian jalankan brew install Formula/PACKAGENAME.rb
untuk menginstalnya.
brew unlink
sebelum brew install
versi lain.
mxcl
?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb
tetapi mendapatkan kesalahan, mungkin karena @
tanda: Error: No available formula with the name "postgresql%409.6" In formula file: /Users/maciek/Library/Caches/Homebrew/Formula/postgresql%409.6.rb Expected to find class Postgresql%4096, but only found: PostgresqlAT96.
Ada ide?
Saya telah menemukan solusi alternatif yang lebih baik daripada solusi kompleks lainnya.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
Ini akan mengunduh dan menginstal PostgreSQL 8.4.8
Saya menemukan solusi ini dengan mulai mengikuti langkah-langkah mencari repo dan komentar di repo.
Setelah sedikit penelitian menemukan bahwa seseorang memiliki koleksi formulars langka untuk dibuat.
Jika Anda mencari MySQL 5.1.x, coba ini.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb
sepertinya gagal dengan kesalahan sintaksis.
raw
di URL
homebrew-versions
adalah pergi dan segala sesuatu yang ada di core
sekarang, jadi kasus umum adalah: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb
. COMMIT
dapat ditemukan dengan mengunjungi github.com/Homebrew/homebrew-core/commits/master/Formula/… .
Anda dapat menggunakan strategi mengidentifikasi rumus dan komit tertentu dalam riwayat rumus yang cocok dengan versi paket yang ingin Anda instal.
Tekan t
pada keyboard Anda untuk mengaktifkan pencari file.
Identifikasi formula yang terlihat paling relevan, mungkin Formula/mysql.rb
:, membawa Anda ke lokasi file forumla: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb .
Lihatlah riwayat revisi dengan mengklik History
tombol, yang terletak di https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb . Jika Anda tertarik dengan MySQL 5.7.10, Anda mungkin ingin mengklik revisi terbaru sebelum 5.7.11, yang menavigasi ke komit GitHub:
CATATAN: Anda mungkin harus melihat histori komit di konsol Anda sesuai saran GitHub jika histori komit tidak dimuat di browser Anda. Ganti SHA komit di atas dalam URL jika Anda tertarik melihat komit itu di GitHub. Atau, lompat ke langkah 7, di bawah ini.
Klik tombol "Lihat" untuk melihat sumber untuk file mysql.rb setelah komit diterapkan.
Kemudian klik tombol "Raw" untuk melihat sumber mentah.
Salin URL. Atau, buat sendiri URL dengan mysql.rb
nama file untuk mengidentifikasi formula Anda dan versi tertentu dari formula itu (diidentifikasi oleh komite SHA di URL di bawah).
Instal dengan $ brew install [URL from step 7]
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
CATATAN: Jawaban ini telah diperbarui untuk memperhitungkan penghapusan situs web braumeister.org. Prinsip yang sama berlaku, braumeister hanya menyediakan cara ramah-pemula untuk menavigasi versi formula.
Sebagian besar jawaban lain sudah usang sekarang. Sayangnya Homebrew masih belum memiliki cara yang terpasang untuk menginstal versi yang sudah kadaluwarsa, kecuali jika versi itu ada sebagai formula yang terpisah (misalnya python@2
, postgresql@9.4
...).
Untungnya, untuk formula lain ada cara yang jauh lebih mudah daripada kekacauan berbelit-belit yang dulu diperlukan. Ini instruksi lengkapnya:
Cari versi yang benar di log:
brew log formula
# Scroll down/up with j/k or the arrow keys
# or use eg. /4\.4\.23 to search a specific version
# This syntax only works on pre-2.0 Homebrew versions
brew log --format=format:%H\ %s -F --grep=‹version› ‹formula›
Ini akan menampilkan daftar hash komit. Ambil satu yang sesuai (kebanyakan itu harus cukup jelas, dan biasanya yang paling baru (yaitu atas).
Temukan URL tempat rumus berada di repositori hulu:
brew info ‹formula› | grep ^From:
Perbaiki URL:
github.com
denganraw.githubusercontent.com
blob/master
dengan hash komit yang kami temukan di langkah pertama.Instal versi yang diinginkan dengan mengganti master
URL yang sebelumnya ditemukan oleh hash komit, misalnya:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
(Langkah terakhir mungkin mengharuskan berjalan brew unlink ‹formula›
sebelumnya.)
Jika Anda telah menyalin hash komit yang ingin Anda gunakan, Anda dapat menggunakan sesuatu seperti contoh ini untuk menginstal versi itu, mengganti nilai dan bash
dengan hash komit Anda dan formula yang Anda inginkan.
BREW_VERSION_SHA=32353d2286f850fd965e0a48bcf692b83a6e9a41
BREW_FORMULA_NAME=bash
brew info $BREW_FORMULA_NAME \
| sed -n \
-e '/^From: /s///' \
-e 's/github.com/raw.githubusercontent.com/' \
-e 's%blob/%%' \
-e "s/master/$BREW_VERSION_SHA/p" \
| xargs brew install
Contoh ini menginstal bash 4.4.23 bukan bash 5, meskipun jika Anda melakukan brew upgrade
bash 5 maka bash 5 akan diinstal di atas, kecuali Anda pertama kali dieksekusi brew pin bash
. Alih-alih membuat ini lebih lancar TANPA menyematkan, Anda harus menginstal yang terbaru terlebih dahulu brew install bash
, kemudian brew unlink bash
, instal versi yang lebih lama yang Anda inginkan sesuai skrip di atas, dan kemudian gunakan brew switch bash 4.4.23
untuk mengatur symlink ke versi yang lebih lama. Sekarang brew upgrade
seharusnya tidak memengaruhi versi Bash Anda. Anda bisa brew switch bash
mendapatkan daftar versi yang tersedia untuk beralih.
Cara lain untuk mencapai tujuan yang sama tampaknya:
brew tap-new username/repo-name
# extract with a version seems to run a grep under the hood
brew extract --version='4.4.23' bash username/repo-name
brew install bash@4.4.23
# Note this "fails" when trying to grab a bottle for the package and seems to have
# some odd doubling of the version in that output, but this isn't fatal.
Ini menciptakan sebuah formula@version
ketukan khusus yang dapat Anda instal per contoh di atas. Kelemahannya adalah bahwa Anda mungkin masih perlu brew unlink bash
dan kemudian brew link bash@4.4.23
untuk menggunakan versi spesifik Bash Anda atau formula lainnya.
brew log
jadi tambahan apapun -F
atau --grep
opsi yang gagal untuk saya.
brew log
. Saya tidak dapat diganggu untuk menulis versi baru sekarang karena itu membutuhkan penguraian pesan log git dengan benar, atau sebagai alternatif menjalankan git log
langsung pada repositori yang sesuai. Dan changelog tampaknya tidak menyebutkan perubahan yang melanggar ini. Sangat menjengkelkan.
External Command
diperlukan operasi dalam struktur brew
untuk mendapatkan jenis git log
penyaringan kembali. docs.brew.sh/External-Commands
brew extract
penggunaan yang benar , terima kasih!
Saya hanya menggunakan Homebrew untuk kembali ke Maven 2.2.1 karena brew install maven
Maven 3.0.3 yang diinstal sederhana .
Pertama, Anda harus meninggalkan dir maven di sana begitu
$ buatan batalkan tautan pakar
Gunakan perintah penyeduhan minuman
$ brew ketuk homebrew / versi Mengkloning ke '/ usr / local / Library / Taps / versi-homebrew' ... jarak jauh: Menghitung objek: 590, selesai. jarak jauh: Objek yang dikompresi: 100% (265/265), selesai. jarak jauh: Total 590 (delta 362), digunakan kembali 549 (delta 325) Menerima objek: 100% (590/590), 117,49 KiB | 79 KiB / s, selesai. Menyelesaikan delta: 100% (362/362), selesai. Mengetuk 50 formula
Sekarang Anda dapat menginstal rumus maven2:
$ brew instal maven2 ==> Mengunduh http://www.apache.org/dist/maven/maven-2/2.2.1/binaries/apache-maven-2.2.1-bin.tar.gz ############################################### ###################### 100.0% /usr/local/Cellar/maven2/2.2.1: 10 file, 3.1M, dibangun dalam 6 detik
$ mvn --versi Apache Maven 2.2.1 (r801777; 2009-08-06 12: 16: 01-0700) Versi Java: 1.6.0_37 Beranda Java: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Lokal default: en_US, pengkodean platform: MacRoman Nama OS: "mac os x" versi: "10.7.4" arch: "x86_64" Family: "mac"
Sunting:
Anda juga dapat hanya brew switch maven 2.2.1
beralih ke versi yang berbeda.
Sunting: Proyek Apache Maven mereorganisasi repo mereka. Memperbarui jawaban ini untuk menjelaskan perubahan ini.
Berdasarkan alur kerja yang dijelaskan oleh pembaruan @tschundeee dan @ Debilski , saya mengotomatiskan prosedur dan menambahkan pembersihan dalam skrip ini .
Unduh , letakkan di jalur Anda dan brewv <formula_name> <wanted_version>
. Untuk OP spesifik, itu akan menjadi:
cd path/to/downloaded/script/
./brewv postgresql 8.4.4
:)
Jawaban yang diperbarui sejak itu menambah apa yang sudah diposkan @ lance-pollard sebagai jawaban yang berfungsi.
Cara Memasang versi khusus Formula (rumus yang digunakan dalam contoh ini adalah terraform
):
git log master -- Formula/terraform.rb
jika Anda telah mengkloning repo secara lokal.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
Sayangnya Homebrew masih belum memiliki cara menginstal yang jelas untuk versi yang lebih lama.
Untungnya, untuk kebanyakan formula ada cara yang jauh lebih mudah daripada kekacauan berbelit-belit yang dulu diperlukan. Berikut adalah petunjuk lengkap yang digunakan bash
sebagai contoh:
brew tap-new $USER/local-tap
# extract with a version seems to run a `git log --grep` under the hood
brew extract --version=4.4.23 bash $USER/local-tap
# Install your new version from the tap
brew install bash@4.4.23
# Note this "fails" trying to grab a bottle for the package and seems to have
# some odd doubling of the version in that output, but this isn't fatal.
Ini menciptakan formula@version
ketukan khusus Anda yang dapat Anda instal per contoh di atas. Catatan penting adalah bahwa Anda mungkin perlu brew unlink bash
jika sebelumnya telah menginstal versi standar / terbaru dari formula dan kemudian brew link bash@4.4.23
untuk menggunakan versi spesifik Bash Anda (atau formula lain di mana Anda memiliki versi terbaru dan yang lebih lama diinstal).
Kelemahan potensial dari metode ini adalah Anda tidak dapat dengan mudah beralih antar versi karena menurutnya brew
merupakan "formula yang berbeda".
Jika Anda ingin dapat menggunakan brew switch $FORMULA $VERSION
Anda harus menggunakan metode selanjutnya.
Contoh ini menunjukkan menginstal bash 4.4.23 yang lebih lama, contoh yang berguna karena bash
rumus saat ini menginstal bash 5.
brew install bash
brew unlink bash
brew switch bash 4.4.23
untuk mengatur symlink ke versi AndaJika Anda melakukan brew upgrade
setelah menginstal versi yang lebih lama tanpa menginstal yang terbaru, maka yang terbaru akan terinstal mengacaukan versi yang lebih lama, kecuali Anda terlebih dahulu dieksekusi brew pin bash
.
Langkah-langkah di sini HINDARI menyematkan karena mudah dilupakan dan Anda mungkin menyematkan ke versi yang menjadi tidak aman di masa mendatang (lihat Shellshock / etc). Dengan pengaturan ini, brew upgrade
seharusnya tidak memengaruhi versi Bash Anda dan Anda selalu dapat berlari brew switch bash
untuk mendapatkan daftar versi yang tersedia untuk beralih.
Salin dan tempel dan edit export
baris dari cuplikan kode di bawah ini untuk memperbarui dengan versi dan nama formula yang Anda inginkan, lalu salin dan tempel sisanya apa adanya dan itu akan menggunakan variabel-variabel itu untuk melakukan keajaiban.
# This search syntax works with newer Homebrew
export BREW_FORMULA_SEARCH_VERSION=4.4.23 BREW_FORMULA_NAME=bash
# This will print any/all commits that match the version and formula name
git -C $(brew --repo homebrew/core) log \
--format=format:%H\ %s -F --all-match \
--grep=$BREW_FORMULA_SEARCH_VERSION --grep=$BREW_FORMULA_NAME
Saat Anda yakin versi ada dalam rumus, Anda dapat menggunakan yang berikut ini:
# Gets only the latest Git commit SHA for the script further down
export BREW_FORMULA_VERSION_SHA=$(git -C $(brew --repo homebrew/core) log \
--format=format:%H\ %s -F --all-match \
--grep=$BREW_FORMULA_SEARCH_VERSION --grep=$BREW_FORMULA_NAME | \
head -1 | awk '{print $1}')
Setelah Anda mengekspor hash komit yang ingin Anda gunakan, Anda dapat menggunakan ini untuk menginstal versi paket itu.
brew info $BREW_FORMULA_NAME \
| sed -n \
-e '/^From: /s///' \
-e 's/github.com/raw.githubusercontent.com/' \
-e 's%blob/%%' \
-e "s/master/$BREW_FORMULA_VERSION_SHA/p" \
| xargs brew install
Ikuti petunjuk dalam output rumus untuk memasukkannya ke PATH Anda atau menjadikannya sebagai shell default Anda.
Pada versi homebrew terbaru (0.9.5 pada tulisan ini) akan ada resep khusus untuk versi tong homebrew yang ingin Anda instal. Contoh:
$ brew search mongodb
mongodb mongodb24 mongodb26
Maka lakukan brew install mongodb26
seperti biasa.
Dalam hal bahwa Anda telah menginstal versi terbaru, pastikan untuk menghapus link versi terbaru dan link versi yang diinginkan: brew unlink mongodb && brew link mongodb26
.
Masalahnya homebrew/versions
adalah seseorang harus memiliki versi perangkat lunak tertentu yang terdaftar dalam repositori agar Anda dapat menggunakannya. Juga, karena brew versions
tidak lagi didukung, solusi lain diperlukan. Untuk solusi yang menunjukkan penggunaan brew switch
, ini hanya akan berfungsi jika Anda belum melakukan brew cleanup
karena versi perlu ada di komputer Anda.
Saya memiliki masalah dengan keinginan untuk menginstal versi lama yang spesifik docker-machine
yang tidak tercantum dalam homebrew/versions
. Saya memecahkan ini menggunakan di bawah ini, yang juga harus bekerja untuk perangkat lunak yang diinstal buatan. Contoh di bawah ini akan digunakan docker-machine
sebagai paket yang ingin saya turunkan dari versi 0.5.0 ke 0.4.1.
Buka Formula
direktori homebrew Anda .
Anda dapat menentukan ini dengan menjalankan brew info [any package name]
. Misalnya, brew info docker-machine
beri saya garis yang menunjukkan saya jalan - /usr/local/Cellar/docker-machine/0.5.0
. Ini memberitahu saya bahwa pada mesin saya, homebrew diinstal pada /usr/local
dan Formula
direktori saya secara default di/usr/local/Library/Formula
Temukan file formula spesifik (.rb) untuk paket Anda.
Karena saya ingin menurunkan versi docker-machine
, saya dapat melihat docker-machine.rb
file.
Dapatkan riwayat versi untuk file formula ini . Masukkan git log docker-machine.rb
. Ini akan mencantumkan riwayat komit lengkap untuk file ini. Anda akan melihat output seperti ini:
...lebih komit 20c7abc13d2edd67c8c1d30c407bd5e31229cacc Penulis: BrewTestBot Tanggal: Kamis 5 Nov 16:14:18 2015 +0000 docker-machine: perbarui 0,5.0 botol. komit 8f615708184884e501bf5c16482c95eff6aea637 Penulis: Vincent Lesierse Tanggal: Sel 27 Okt 22:25:30 2015 +0100 buruh pelabuhan-mesin 0,5.0 Mesin docker yang diperbarui menjadi 0,5.0 Menutup # 45403. Ditandatangani oleh: Dominyk Tiller komit 5970e1af9b13dcbeffd281ae57c9ab90316ba423 Penulis: BrewTestBot Tanggal: Sen 21 Sep 14:04:04 2015 +0100 docker-machine: perbarui 0.4.1 botol. komit 18fcbd36d22fa0c19406d699308fafb44e4c8dcd Penulis: BrewTestBot Tanggal: Minggu 16 Agt 09:05:56 2015 +0100 docker-machine: perbarui 0.4.1 botol. ...lebih
Bagian yang sulit adalah menemukan komit terbaru untuk versi spesifik yang Anda inginkan. Dalam contoh di atas, saya dapat memberitahu versi terbaru 0.4.1 berkomitmen dengan ini berkomitmen tag: commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
. Komit di atas titik ini mulai menggunakan versi 0.5.0 (entri log git terdaftar dari terbaru ke tanggal paling awal).
Dapatkan versi sebelumnya dari file formula. Menggunakan tag komit dari langkah # 3 (Anda dapat menggunakan 6 karakter pertama), Anda bisa mendapatkan versi yang lebih lama dari file formula menggunakan yang berikut ini:
git checkout 5970e1 docker-machine.rb
Copot versi paket Anda saat ini.
Jalankan saja perintah pembuatan bir normal untuk menghapus instalasi versi paket Anda saat ini.
Ex.brew uninstall docker-machine
Instal versi paket yang lebih lama
Sekarang, Anda hanya dapat menjalankan perintah install brew normal dan itu akan menginstal formula yang sudah Anda checkout. Ex.brew install docker-machine
Anda mungkin perlu menautkan kembali dengan menggunakan brew link docker-machine
jika perlu.
Jika suatu saat Anda ingin kembali ke versi terbaru dari paket tertentu, masuk ke direktori Formula dan mengeluarkan perintah berikut pada file formula Anda (.rb)
git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
Kemudian Anda bisa brew uninstall docker-machine
dan brew install docker-machine
untuk mendapatkan versi terbaru dan tetap seperti itu ke depan.
git log --grep 0.4.1 docker-machine.rb
.
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
cairo
minuman dengan cara ini. Jawaban @ sealocal menunjukkan lebih banyak, untuk beberapa alasan.
Situasi saya: postgresql
ditingkatkan dari 11 menjadi 12 secara tidak sengaja. Saya ingin menyimpan 11.
brew services stop postgresql
brew install postgresql@11
brew link postgresql@11 --force
postgres
menjadi postgres@11
:cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11
brew services start postgresql@11
Jika Anda memiliki kesalahan, periksa /usr/local/var/log/postgresql@11.log
(perhatikan @ 11).
brew postgresql-upgrade-database
). Jawaban ini tidak berguna untuk hampir semua formula lainnya.
brew postgresql-upgrade-database
untuk upgrade . Jawaban saya adalah tentang menggunakan versi Postgres yang lebih lama . Cukup berpindah binari tidak akan bekerja.
nvm
, FYI Saya beruntung menggunakan teknik ini untuk rilis LTS yang lebih lama. Setidaknya pada saat penulisan v10 & v12 harus tersedia, mis. brew install node@12
Formulae.brew.sh/formula/node
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/
ATAU
git clone git@github.com:Homebrew/homebrew-core.git
git log master -- Formula/flyway.rb
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/793abfa325531415184e1549836c982b39e89299/Formula/flyway.rb
brew install Formula/flyway.rb
dari homebrew-core
direktori? itu bekerja untuk saya tanpa menggunakan raw.github..
alamat
Saya sudah mencoba sebagian besar solusi di sini dan mereka sudah usang. Saya harus menggabungkan beberapa ide dari sini dengan pekerjaan saya sendiri. Sebagai hasilnya, saya membuat skrip untuk membantu saya melakukan pekerjaan berat yang dapat Anda temukan di sini
Pemakaian:
brewv.sh formula_name desired_version
itu bisa dilakukan dengan sangat mudah untuk versi terakhir minuman.
brew tap homebrew/versions
brew install subversion17 # for svn 1.7 branch instead of last available
brew install postgresql8 # for postgresql 8 (which you ask)
Tidak ada yang benar-benar berfungsi untuk kasus saya (Python), jadi saya akan menambahkan 2 sen:
cd `brew --prefix`
git log Library/Formula/python.rb
Output terlihat seperti ini:
commit 9ff2d8ca791ed1bd149fb8be063db0ed6a67a6de Author: Dominyk Tiller <dominyktiller@gmail.com> Date: Thu Jun 30 17:42:18 2016 +0100 python: clarify pour_bottle reason commit cb3b29b824a264895434214e191d0d7ef4d51c85 Author: BrewTestBot <brew-test-bot@googlegroups.com> Date: Wed Jun 29 14:18:40 2016 +0100 python: update 2.7.12 bottle. commit 45bb1e220341894bbb7de6fd3f6df20987dc14f0 Author: Rakesh <rakkesh@users.noreply.github.com> Date: Wed Jun 29 10:02:26 2016 +0530 python 2.7.12 Closes #2452. Signed-off-by: Tim D. Smith <git@tim-smith.us> commit cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9 Author: BrewTestBot <brew-test-bot@googlegroups.com> Date: Fri Jun 17 20:14:36 2016 +0100 python: update 2.7.11 bottle. ...
Saya ingin versi 2.7.11
jadi hash saya adalah cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
(atau cf5da05
singkatnya). Selanjutnya, saya memeriksa versi itu dan menginstal rumus python
:
git checkout cf5da05
brew install python
Akhirnya, bersihkan:
git checkout master
HOMEBREW_NO_AUTO_UPDATE
dan baca github.com/Homebrew/brew/issues/1188
cd
brew --prefix /Homebrew
dangit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Taps
diabaikan.
HOMEBREW_NO_AUTO_UPDATE
. Ya, jangan lupakan hal yang Anda butuhkan sampai setelah Anda tahu Anda membutuhkannya. xD
HOMEBREW_NO_INSTALL_CLEANUP
bukankah ini sesuatu yang perlu Anda ingat?
Jika Anda tidak dapat menemukan versinya brew search <formula>
, Anda juga dapat mencoba memeriksa log komit untuk rumus Anda untuk menemukan versi yang Anda inginkan:
berikut adalah contoh untuk menginstal versi nginx via brew yang lebih lama:
Lihat nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
Dari sana, kita dapat menginstal 1.6.3
dengan ur sha dan raw git:
brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
Saat ini cara lama untuk menginstal versi formula tertentu telah usang. Jadi sepertinya kita harus menggunakan brew edit [formula]
. Misalnya katakan kita ingin menginstal 62.1
versi icu4c
(diperlukan misalnya untuk postgresql 10.5
). Maka Anda harus melakukannya
> brew edit icu4c
# drops you to editor
Di sini Anda harus mengubah url
, version
dan sha256
(mungkin juga mirror
) ke 62.1
string yang sesuai .
url "https://ssl.icu-project.org/files/icu4c/62.1/icu4c-62_1-src.tgz"
mirror "https://github.com/unicode-org/icu/releases/download/release-62-1/icu4c-62_1-src.tgz"
version "62.1"
sha256 "3dd9868d666350dda66a6e305eecde9d479fb70b30d5b55d78a1deffb97d5aa3"
kemudian jalankan brew reinstall icu4c
untuk mengunduh 62.1
versi akhirnya .
sha256
? dalam kasus sayahttps://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip
Perbarui pada Library / Formula / postgresql.rb baris 8 ke
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2
Dan MD5 pada jalur 9 hingga
fcc3daaf2292fa6bf1185ec45e512db6
Simpan dan keluar.
brew install postgres
initdb /usr/local/var/postgres
Sekarang dalam tahap ini Anda mungkin menghadapi postgresql could not create shared memory segment
kesalahan, untuk mengatasi pembaruan /etc/sysctl.conf
seperti ini:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Coba initdb /usr/local/var/postgres
lagi, dan itu akan berjalan lancar.
Untuk menjalankan postgresql saat mulai
launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist
Semoga itu bisa membantu :)
Saya baru saja menyalin rilis lama elasticsearch ke /usr/local/Cellar/elasticsearch
direktori.
$ mkdir /usr/local/Cellar/elasticsearch/5.4.3/bin
$ cp elasticsearch /usr/local/Cellar/elasticsearch/5.4.3/bin
$ brew switch elasticsearch 5.4.3
Itu dia. Mungkin bermanfaat bagi siapa saja.
Saya memutuskan, bertentangan dengan penilaian saya yang lebih baik, untuk membuat formula untuk Maven 3.1.1, yang homebrew/versions
tidak ada. Untuk melakukan ini:
homebrew/versions
di github.$(brew --prefix)/Library/Taps
ke copy pekerjaan lokal garpu saya. Saya akan memanggil inimy-homebrew/versions
.my-homebrew/versions/<formula>
.homebrew/versions
untuk formula baru saya.Yay.
Untuk versi yang saat ini tidak ada dalam formula pembuatan bir default, Anda dapat dengan mudah membuat keran Anda sendiri dengan alat dari https://github.com/buildtools-version-taps/homebrew-versions-tap-tool
brew tap-new user/repo
dan kemudian brew extract --version='Major.minor' FORMULA user/repo
dan kemudian brew install FORMULA@Major.minor
.
Saya membuat alat untuk memudahkan proses yang ditentukan dalam jawaban ini .
Untuk menemukan paket pkg
dengan versi a.b.c
, jalankan:
$ brew-install-specific pkg@a.b.c
Daftar ini akan melakukan komit pada pkg
rumusan rumahan yang menyebutkan versi yang diberikan bersama dengan url GitHub mereka.
Matching versions:
1. pkg: update a.b.c bottle.
https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>
2. pkg: release a.b.c-beta
https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>
3. pkg a.b.c
https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>
Select index:
Verifikasi komit dari URL yang diberikan, dan masukkan indeks komit yang dipilih.
Select index: 2
Run:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb
Salin dan jalankan perintah yang diberikan untuk menginstal.
postgresql
adalah yang aneh karena memiliki versi terpisah di Homebrew pada satu titik, sesuatu sepertibash
mungkin menjadi contoh yang lebih baik karena ia beralih dari 4.x ke 5.x dalam nama formula yang sama. Lihat stackoverflow.com/a/55764594/3794873