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 switchadalah 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 switchhanya 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 switchsebagian 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/versionskeran. (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 versionsperintah, yang meludahkan semua versi yang tersedia dengan hash SHA masing-masing. Pada Oktober 2014, Anda harus melakukan brew tap homebrew/boneyardsebelum 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 -Smencari 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, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422adalah 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 upgradeprosedur 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 updatemembuat repo Git-nya.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core, maka Anda dapat menggunakan git checkout 4cce79d -- Formula/go.rbdan 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 cdke direktori saja (tanpa FORMULANAME.rb), lalu lakukangit checkout 120938
cd /usr/localdulu.
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 --overwritedi 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 switchhanya mengubah symlink, itu sangat cepat. Lihat dokumentasi lebih lanjut tentang Wiki Homebrew di bawah Perintah Eksternal .
brew switchbergantung 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 unlinkterlebih dahulu, misalnya brew unlink docker)brew switch docker 1.3.3brew switch docker 1.4.1Dari 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.
Rawtombol 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.rbpackage@version
git log master -- Formula/PACKAGENAME.rbuntuk mendapatkan histori komit, periksa komit yang benar, dan kemudian jalankan brew install Formula/PACKAGENAME.rbuntuk menginstalnya.
brew unlinksebelum brew installversi lain.
mxcl?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rbtetapi 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.rbsepertinya gagal dengan kesalahan sintaksis.
rawdi URL
homebrew-versionsadalah pergi dan segala sesuatu yang ada di coresekarang, jadi kasus umum adalah: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb. COMMITdapat 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 tpada 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 Historytombol, 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.rbnama 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.comdenganraw.githubusercontent.comblob/masterdengan hash komit yang kami temukan di langkah pertama.Instal versi yang diinginkan dengan mengganti masterURL 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 bashdengan 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 upgradebash 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.23untuk mengatur symlink ke versi yang lebih lama. Sekarang brew upgradeseharusnya tidak memengaruhi versi Bash Anda. Anda bisa brew switch bashmendapatkan 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@versionketukan khusus yang dapat Anda instal per contoh di atas. Kelemahannya adalah bahwa Anda mungkin masih perlu brew unlink bashdan kemudian brew link bash@4.4.23untuk menggunakan versi spesifik Bash Anda atau formula lainnya.
brew logjadi tambahan apapun -Fatau --grepopsi 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 loglangsung pada repositori yang sesuai. Dan changelog tampaknya tidak menyebutkan perubahan yang melanggar ini. Sangat menjengkelkan.
External Commanddiperlukan operasi dalam struktur brewuntuk mendapatkan jenis git logpenyaringan kembali. docs.brew.sh/External-Commands
brew extractpenggunaan yang benar , terima kasih!
Saya hanya menggunakan Homebrew untuk kembali ke Maven 2.2.1 karena brew install mavenMaven 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.1beralih 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.rbjika Anda telah mengkloning repo secara lokal.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rbSayangnya 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 bashsebagai 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@versionketukan khusus Anda yang dapat Anda instal per contoh di atas. Catatan penting adalah bahwa Anda mungkin perlu brew unlink bashjika sebelumnya telah menginstal versi standar / terbaru dari formula dan kemudian brew link bash@4.4.23untuk 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 brewmerupakan "formula yang berbeda".
Jika Anda ingin dapat menggunakan brew switch $FORMULA $VERSIONAnda harus menggunakan metode selanjutnya.
Contoh ini menunjukkan menginstal bash 4.4.23 yang lebih lama, contoh yang berguna karena bashrumus saat ini menginstal bash 5.
brew install bashbrew unlink bashbrew switch bash 4.4.23untuk mengatur symlink ke versi AndaJika Anda melakukan brew upgradesetelah 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 upgradeseharusnya tidak memengaruhi versi Bash Anda dan Anda selalu dapat berlari brew switch bashuntuk mendapatkan daftar versi yang tersedia untuk beralih.
Salin dan tempel dan edit exportbaris 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 mongodb26seperti 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/versionsadalah seseorang harus memiliki versi perangkat lunak tertentu yang terdaftar dalam repositori agar Anda dapat menggunakannya. Juga, karena brew versionstidak lagi didukung, solusi lain diperlukan. Untuk solusi yang menunjukkan penggunaan brew switch, ini hanya akan berfungsi jika Anda belum melakukan brew cleanupkarena versi perlu ada di komputer Anda.
Saya memiliki masalah dengan keinginan untuk menginstal versi lama yang spesifik docker-machineyang 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-machinesebagai paket yang ingin saya turunkan dari versi 0.5.0 ke 0.4.1.
Buka Formuladirektori homebrew Anda .
Anda dapat menentukan ini dengan menjalankan brew info [any package name]. Misalnya, brew info docker-machineberi 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/localdan 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.rbfile.
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-machinejika 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-machinedan brew install docker-machineuntuk 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
cairominuman dengan cara ini. Jawaban @ sealocal menunjukkan lebih banyak, untuk beberapa alasan.
Situasi saya: postgresqlditingkatkan dari 11 menjadi 12 secara tidak sengaja. Saya ingin menyimpan 11.
brew services stop postgresql
brew install postgresql@11
brew link postgresql@11 --force
postgresmenjadi 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-databaseuntuk 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.rbdari homebrew-coredirektori? 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.11jadi hash saya adalah cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9(atau cf5da05singkatnya). Selanjutnya, saya memeriksa versi itu dan menginstal rumus python:
git checkout cf5da05
brew install python
Akhirnya, bersihkan:
git checkout master
HOMEBREW_NO_AUTO_UPDATEdan baca github.com/Homebrew/brew/issues/1188
cd brew --prefix /Homebrewdangit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Tapsdiabaikan.
HOMEBREW_NO_AUTO_UPDATE. Ya, jangan lupakan hal yang Anda butuhkan sampai setelah Anda tahu Anda membutuhkannya. xD
HOMEBREW_NO_INSTALL_CLEANUPbukankah 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.3dengan 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.1versi icu4c(diperlukan misalnya untuk postgresql 10.5). Maka Anda harus melakukannya
> brew edit icu4c
# drops you to editor
Di sini Anda harus mengubah url, versiondan sha256(mungkin juga mirror) ke 62.1string 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 icu4cuntuk mengunduh 62.1versi 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 segmentkesalahan, untuk mengatasi pembaruan /etc/sysctl.confseperti ini:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Coba initdb /usr/local/var/postgreslagi, 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/elasticsearchdirektori.
$ 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/versionstidak ada. Untuk melakukan ini:
homebrew/versions di github.$(brew --prefix)/Library/Tapske copy pekerjaan lokal garpu saya. Saya akan memanggil inimy-homebrew/versions .my-homebrew/versions/<formula> .homebrew/versionsuntuk 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/repodan kemudian brew extract --version='Major.minor' FORMULA user/repodan kemudian brew install FORMULA@Major.minor.
Saya membuat alat untuk memudahkan proses yang ditentukan dalam jawaban ini .
Untuk menemukan paket pkgdengan versi a.b.c, jalankan:
$ brew-install-specific pkg@a.b.c
Daftar ini akan melakukan komit pada pkgrumusan 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.
postgresqladalah yang aneh karena memiliki versi terpisah di Homebrew pada satu titik, sesuatu sepertibashmungkin 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