Homebrew cài đặt phiên bản cụ thể của công thức?


2197

Làm cách nào để cài đặt phiên bản cụ thể của công thức trong homebrew? Ví dụ, postgresql-8.4.4 thay vì 9.0 mới nhất.


2
postgresqllà một điều kỳ lạ bởi vì nó có các phiên bản riêng biệt trong Homebrew tại một thời điểm, một cái gì đó giống như bashcó thể là một ví dụ tốt hơn vì nó đã tăng từ 4.x đến 5.x trong cùng một tên công thức. Xem stackoverflow.com/a/55764594/3794873
dragon788


2
Tôi đọc tất cả các câu trả lời. Đó là năm 2020 và không có cách nào dễ dàng hay mệnh lệnh chính thức để làm điều đó
oluckyman

Câu trả lời:


2556

TLDR: brew install postgresql@8.4.4 Xem câu trả lời dưới đây để biết thêm chi tiết.


* ( Tôi đã chỉnh sửa lại câu trả lời của mình để cung cấp quy trình làm việc kỹ lưỡng hơn cho việc cài đặt / sử dụng các phiên bản phần mềm cũ hơn với homebrew. Vui lòng thêm ghi chú nếu bạn thấy phiên bản cũ tốt hơn. )

Hãy bắt đầu với trường hợp đơn giản nhất:

1) Kiểm tra xem phiên bản đã được cài đặt chưa (nhưng chưa được kích hoạt)

Khi homebrew cài đặt một công thức mới, nó sẽ đặt nó trong một thư mục được phiên bản như thế nào /usr/local/Cellar/postgresql/9.3.1. Chỉ các liên kết tượng trưng đến thư mục này sau đó được cài đặt trên toàn cầu. Về nguyên tắc, điều này giúp dễ dàng chuyển đổi giữa hai phiên bản đã cài đặt. (*)

Nếu bạn đã sử dụng homebrew lâu hơn và không bao giờ xóa các phiên bản cũ hơn (ví dụ như sử dụng brew cleanup), có thể một số phiên bản cũ hơn của chương trình của bạn vẫn còn tồn tại. Nếu bạn chỉ muốn kích hoạt phiên bản trước đó, brew switchlà cách dễ nhất để làm điều này.

Kiểm tra với brew info postgresql(hoặc brew switch postgresql <TAB>) xem phiên bản cũ hơn đã được cài đặt chưa:

$ 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

Chúng tôi thấy rằng một số phiên bản cũ hơn đã được cài đặt. Chúng tôi có thể kích hoạt nó bằng cách sử dụng 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

Hãy kiểm tra kỹ những gì được kích hoạt:

$ 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

Lưu ý rằng ngôi sao *đã chuyển sang phiên bản mới được kích hoạt

(*) Xin lưu ý rằng brew switchchỉ hoạt động miễn là tất cả các phụ thuộc của phiên bản cũ vẫn còn. Trong một số trường hợp, việc xây dựng lại phiên bản cũ hơn có thể trở nên cần thiết. Do đó, việc sử dụng brew switchchủ yếu hữu ích khi người ta muốn chuyển đổi giữa hai phiên bản không quá xa nhau.

2) Kiểm tra xem phiên bản có khả dụng dưới dạng một lần nhấn không

Đặc biệt đối với các dự án phần mềm lớn hơn, rất có thể có nhu cầu đủ cao đối với một số phiên bản chính (có khả năng không tương thích API) của một phần mềm nhất định. Kể từ tháng 3 năm 2012, Homebrew 0.9 cung cấp một cơ chế cho việc này: brew tap& kho lưu trữ phiên bản homebrew .

Kho lưu trữ phiên bản đó có thể bao gồm các bản sao lưu của các phiên bản cũ hơn cho một số công thức. (Hầu hết chỉ có những người lớn và nổi tiếng, nhưng tất nhiên họ cũng sẽ có một số công thức cho postgresql.)

brew search postgresql sẽ chỉ cho bạn nơi để tìm:

$ brew search postgresql
postgresql
homebrew/versions/postgresql8    homebrew/versions/postgresql91
homebrew/versions/postgresql9    homebrew/versions/postgresql92

Chúng ta chỉ cần cài đặt nó bằng cách gõ

$ 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
# …

Lưu ý rằng điều này đã tự động khai thác các homebrew/versionsvòi. (Kiểm tra bằng brew tap, xóa bằng brew untap homebrew/versions.) Sau đây sẽ tương đương:

$ brew tap homebrew/versions
$ brew install postgresql8

Miễn là các công thức phiên bản backport được cập nhật, cách tiếp cận này có lẽ là cách tốt nhất để đối phó với phần mềm cũ hơn.

3) Hãy thử một số công thức từ quá khứ

Các cách tiếp cận sau đây được liệt kê chủ yếu cho sự hoàn chỉnh. Cả hai cố gắng phục sinh một số công thức undead từ kho bia. Do phụ thuộc thay đổi, API thay đổi trong thông số công thức hoặc đơn giản là thay đổi URL tải xuống, mọi thứ có thể hoặc không thể hoạt động.

Vì toàn bộ thư mục công thức là kho lưu trữ git, người ta có thể cài đặt các phiên bản cụ thể bằng cách sử dụng các lệnh git đơn giản. Tuy nhiên, chúng ta cần tìm cách để có được một cam kết nơi có phiên bản cũ.

a) thời kỳ lịch sử

Từ tháng 8 năm 2011 đến tháng 10 năm 2014 , homebrew đã có một brew versionslệnh, trong đó đưa ra tất cả các phiên bản có sẵn với băm SHA tương ứng của chúng. Kể từ tháng 10 năm 2014, bạn phải làm brew tap homebrew/boneyardtrước khi có thể sử dụng nó. Như tên của vòi cho thấy, có lẽ bạn chỉ nên làm điều này như là phương sách cuối cùng.

Ví dụ

$ 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

Như bạn có thể thấy, nó khuyên không nên sử dụng nó. Homebrew phun ra tất cả các phiên bản mà nó có thể tìm thấy với heuristic bên trong của nó và chỉ cho bạn một cách để lấy lại các công thức cũ. Hãy thử nó.

# 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

Bây giờ phiên bản postgresql cũ hơn đã được cài đặt, chúng tôi có thể cài đặt lại công thức mới nhất để giữ cho kho lưu trữ của chúng tôi sạch sẽ:

$ git checkout -- Library/Formula/postgresql.rb

brew switch là bạn của bạn để thay đổi giữa cái cũ và cái mới.

b) thời tiền sử

Đối với các nhu cầu đặc biệt, chúng tôi cũng có thể thử tự đào qua repo homebrew.

$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb

git log -Stìm kiếm tất cả các xác nhận trong đó chuỗi '8.4.4'được thêm hoặc xóa trong tệp Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb. Chúng tôi nhận được hai cam kết như là kết quả.

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

Rõ ràng, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422là cam kết mà chúng tôi quan tâm. Vì cam kết này khá cũ, chúng tôi sẽ cố gắng hạ cấp cài đặt homebrew hoàn chỉnh (theo cách đó, API công thức ít nhiều được đảm bảo là hợp lệ):

$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4

Bạn có thể bỏ qua lệnh cuối cùng để giữ tham chiếu trong kho git của bạn.

Một lưu ý: Khi kiểm tra các cam kết cũ hơn, bạn tạm thời hạ cấp cài đặt homebrew của bạn. Vì vậy, bạn nên cẩn thận vì một số lệnh trong homebrew có thể khác với phiên bản gần đây nhất.

4) Viết công thức bằng tay

Nó không quá khó và sau đó bạn có thể tải nó lên kho lưu trữ của riêng bạn. Được sử dụng là Phiên bản Homebrew , nhưng hiện đã ngừng.

A.) Tiền thưởng: Ghim

Nếu bạn muốn giữ một phiên bản nhất định, giả sử postgresql, xung quanh và ngăn không cho nó được cập nhật khi bạn làm brew update; brew upgradethủ tục tự nhiên , bạn có thể ghim một công thức:

$ brew pin postgresql

Các công thức được ghim được liệt kê trong /usr/local/Library/PinnedKegs/và một khi bạn muốn mang đến những thay đổi và cập nhật mới nhất, bạn có thể bỏ ghim lại:

$ brew unpin postgresql

18
Bạn cũng có thể chỉ cần kiểm tra công thức bằng cách sử dụng git checkout fa992 -- Library/Formula/postgresql.rb. Khi bạn hoàn tất, bạn có thể hoàn tác các thay đổi đối với công thức bằng cách sử dụng git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb.
mipadi

18
Lưu ý: trên bản cài đặt Homebrew mới, bạn có thể cần phải brew updatethiết lập repo Git của nó.
Bluu

557
Điều này là vô cùng khó khăn.
Dogweather

30
Cho đến hôm nay, thư mục chính xác để thực hiện các lệnh thủ công đối với kho lưu trữ là cd $(brew --repository)/Library/Taps/homebrew/homebrew-core, sau đó bạn có thể sử dụng git checkout 4cce79d -- Formula/go.rbHOMEBREW_NO_AUTO_UPDATE=1 brew install go.
Calin

12
homebrew / phiên bản không được dùng nữa
Ezekiel Victor

775

Quy trình làm việc đơn giản

Bây giờ Homebrew / phiên bản không được dùng nữa, Homebrew / core hỗ trợ nhiều phiên bản công thức với định dạng đặt tên mới.

Để cài đặt một phiên bản cụ thể, ví dụ postgresql 9.5, bạn chỉ cần chạy:

$ brew install postgresql@9.5

Để liệt kê các phiên bản có sẵn, hãy tìm kiếm với @:

$ brew search postgresql@
==> Searching local taps...
postgresql@10.1 ✔     postgresql@9.4        postgresql@9.5        postgresql@9.6

8
Có vẻ như đơn giản nhất, nhưng khi tôi sao chép và dán, hãy lấy fatal: Not a git repository (or any of the parent directories): .git. Tôi chỉ cdvào thư mục thay thế (không có FORMULANAME.rb), sau đó thực hiệngit checkout 120938
Ramon Tayag

8
@RamonTayag, tôi cũng gặp vấn đề tương tự. Hãy chắc chắn cd /usr/localđầu tiên.
gjb

13
Tôi thấy bạn cần một bước 3.5:brew unlink FORMULANAME
Ý định

37
brew versions <formula>không được hỗ trợ nữa.
ejoubaud

4
@ dem7w2, bạn có thể tạo các liên kết tượng trưng với brew link --force postgresql@9.5. Nếu bạn đã cài đặt phiên bản mới hơn và muốn phiên bản cũ hơn là mặc định của mình, bạn cũng sẽ cần một phiên bản --overwritetrong đó.
Ryan

457

Giờ đây, cách dễ dàng hơn nhiều để cài đặt phiên bản cũ hơn của công thức mà bạn đã cài đặt trước đó. Đơn giản chỉ cần sử dụng

brew switch [formula] [version]

Chẳng hạn, tôi thay thế thường xuyên giữa Node.js 0.4.12 và 0.6.5:

brew switch node 0.4.12
brew switch node 0.6.5

brew switchchỉ cần thay đổi các liên kết tượng trưng, ​​nó rất nhanh. Xem thêm tài liệu về Wiki Homebrew dưới Lệnh ngoài .


2
Tôi đã thử điều này và nó đã thành công với thông báo "33 liên kết được tạo cho /usr/local/Cellar/node/0.4.7", nhưng khi tôi chạy nút sau đó, nó đã thất bại với thông báo "-bash: / usr / local / bin / nút: Không có tệp hoặc thư mục như vậy ". Bất cứ ý tưởng những gì có thể đi sai? Lưu ý: tôi đã tải xuống 0.4.7 bằng tay và đặt nó vào thư mục cellar, vì tôi không biết cách tải xuống anyhting nhưng phiên bản nút mới nhất bằng cách sử dụng brew.
Soroush Hakami

6
Tôi hy vọng bạn biết có một cái gì đó gọi là 'nvm' [ github.com/creationix/nvm] !
Gaurav Agarwal

40
Tôi dựa vào phiên bản gói đã được cài đặt. Nếu bạn thiếu phiên bản, bạn vẫn sẽ cần phải áp dụng câu trả lời đã chọn.
Nic Strong

1
Đối với phiên bản nút nói riêng mgmt, nvm là một giải pháp tốt hơn, imho.
vào

5
@NicStrong Thật vậy, brew switchdựa vào phiên bản tìm kiếm đã được cài đặt. Thật không may, mặc dù, câu trả lời hiện đang được chấp nhận là vô cùng vô ích, hỗn láo và lỗi thời. tốt hơn câu trả lời dưới đây mà là nhiều hơn hữu ích.
GDP2

250

Cập nhật: 15/1/2015

  • Tìm lịch sử cam kết của phần mềm và phiên bản mong muốn. ví dụ: tôi cần chuyển từ phiên bản docker 1.4.1 sang 1.3.3: https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb
  • Xem tập tin với nút này: nhập mô tả hình ảnh ở đây
  • Nhấp vào nút Nguyên: Danh sách mục
  • Sao chép URL (url docker.rb trong ví dụ này) từ thanh địa chỉ
  • brew install <url>(có thể phải brew unlinkđầu tiên, ví dụ brew unlink docker)
  • brew switch docker 1.3.3
  • Chuyển về docker 1.4.1 brew switch docker 1.4.1

Từ ý chính này

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

46
Đây là điều duy nhất làm việc cho tôi. Khá ngớ ngẩn khi một người quản lý gói yêu cầu quá nhiều thứ chỉ để cài đặt phiên bản trước. Có lẽ tôi bị hư hỏng bởi ruby ​​RVM và bundler, nhưng quá trình này thực sự cần phải được sắp xếp hợp lý và trừu tượng hóa.
thơ

3
Khi tôi cố gắng chuyển sang phiên bản Ansible trước đó, tôi phải hủy liên kết công thức trước khi cài đặt phiên bản trước như đã chỉ ra. Vì vậy, trước khi làm brew install <url>, brew unlink <formulaname>. Mặt khác, đây là cách đơn giản và ngắn gọn nhất (cho đến nay) để chuyển sang một phiên bản cụ thể của công thức.
bigsweater

Bạn nhấn Rawnút trên tập tin gì?!
Iulian Onofrei

1
Nó hoạt động, nhưng đôi khi bạn phải tải xuống tệp .rb thô và thay đổi tổng kiểm tra để tránh Homebrew phàn nàn về SHA không khớp. GitHub dường như có một phần lớn cây repo được tìm kiếm lại vào năm 2017 và tổng kiểm tra của họ đã thay đổi. (Trên thực tế, nó đã gây ra nhiều nhầm lẫn trong đội của tôi khi Bazel bắt đầu thất bại với sự không phù hợp băm vào tháng 7 năm ngoái)
Chang Qian

6
Tôi tìm thấy địa chỉ một cách dễ dàng bởibrew log <formula>
kangkyu

128

Theo dòng gợi ý của @ Halfcube, điều này thực sự hiệu quả:

  1. Tìm thư viện bạn đang tìm kiếm https://github.com/Homebrew/homebrew-core/tree/master/Formula
  2. Nhấp vào nó: https://github.com/Homebrew/homebrew-core/blob/master/Formula/postgresql.rb
  3. Nhấp vào nút "lịch sử" để xem các cam kết cũ: https://github.com/Homebrew/homebrew-core/commits/master/Formula/postgresql.rb
  4. Nhấp vào cái bạn muốn: "postgresql: cập nhật phiên bản lên 8.4.4", https://github.com/Homebrew/homebrew-core/blob/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgres.
  5. Nhấp vào liên kết "thô": https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
  6. brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb

8
Đây là cách dễ nhất để cài đặt phiên bản cần thiết của gói nếu nó không có sẵn trong repo cốt lõi nhưpackage@version
avy

7
Nếu bạn không thể sử dụng giao diện web, bạn có thể sao chép repo và thực hiện cục bộ: sử dụng git log master -- Formula/PACKAGENAME.rbđể lấy lịch sử cam kết, kiểm tra cam kết chính xác và sau đó chạy brew install Formula/PACKAGENAME.rbđể cài đặt nó.
chipbuster

7
Tôi nghĩ bạn cần brew unlinktrước brew installphiên bản khác.
studgeek

Ai này là mxcl?
PJSCopeland

1
Tôi làm điều này brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rbnhưng nhận được lỗi, có thể là do @ký: 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.Bất kỳ ý tưởng?
msciwoj

109

Tôi đã phát hiện ra một giải pháp thay thế tốt hơn sau đó là các giải pháp phức tạp khác.

brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb

Điều này sẽ tải xuống và cài đặt PostgreSQL 8.4.8


Tôi tìm thấy giải pháp này bằng cách bắt đầu làm theo các bước tìm kiếm repo và nhận xét trong repo.

Sau một nghiên cứu nhỏ phát hiện ra rằng ai đó có một bộ sưu tập các công thức hiếm để pha chế.


Nếu bạn đang tìm kiếm MySQL 5.1.x, hãy dùng thử.

brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb

1
hmm, brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rbdường như thất bại với lỗi cú pháp.
Brian Armstrong

6
@BrianArmstrong Bạn đang đề cập đến một phiên bản tệp có định dạng html, trong khi bạn cần một phiên bản thô .
Nikita Volkov

Tới github.com/Homebrew/homebrew/commits/master/Library/Formula/... , chọn phiên bản của bạn, mã duyệt, thô - sử dụng url này.
jpillora

1
Đừng quên rawURL
Faber

9
homebrew-versionsđã biến mất và mọi thứ đã bắt đầu core, vì vậy trường hợp chung là : brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb. COMMITcó thể được tìm thấy bằng cách truy cập github.com/Homebrew/homebrew-core/commits/master/Formula/ .
PJSCopeland

78

Bạn có thể sử dụng chiến lược xác định công thức và một cam kết cụ thể trong lịch sử của công thức phù hợp với phiên bản của gói bạn muốn cài đặt.

  1. Tới https://github.com/Homebrew/homebrew-core

  2. Nhấn ttrên bàn phím của bạn để kích hoạt công cụ tìm tập tin.

  3. Xác định một công thức có vẻ phù hợp nhất, có lẽ : Formula/mysql.rb, đưa bạn đến vị trí tệp forumla: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb .

  4. Nhìn vào lịch sử sửa đổi bằng cách nhấp vào Historynút, được đặt tại https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb . Nếu bạn quan tâm đến MySQL 5.7.10, bạn có thể muốn nhấp vào phiên bản mới nhất trước ngày 5.7.11, điều hướng đến một cam kết GitHub:

    https://github.com/Homebrew/homebrew-core/commit/c77882756a832ac1d87e7394c114158e5619016c#Formula/mysql.rb

LƯU Ý: Bạn có thể phải xem lịch sử cam kết trong bảng điều khiển theo đề xuất của GitHub nếu lịch sử cam kết không tải trong trình duyệt của bạn. Thay thế cam kết SHA ở trên trong URL nếu bạn muốn thấy cam kết đó trên GitHub. Hoặc, bỏ qua bước 7, bên dưới.

  1. Nhấp vào nút "Xem" để xem nguồn cho tệp mysql.rb sau khi cam kết được áp dụng.

  2. Sau đó nhấp vào nút "Nguyên" để xem nguồn thô.

  3. Sao chép URL. Ngoài ra, hãy tự xây dựng URL bằng mysql.rbtên tệp để xác định công thức của bạn và phiên bản cụ thể của công thức đó (được xác định bởi SHA được xác nhận trong URL bên dưới).

    https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7394c114158e5619016c/Formula/mysql.rb

  4. Cài đặt nó với $ brew install [URL from step 7]

    $ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
    

LƯU Ý: Câu trả lời này đã được cập nhật vào tài khoản để xóa trang web braumeister.org. Nguyên tắc tương tự được áp dụng, braumeister chỉ đơn giản là cung cấp một cách thân thiện cho người mới bắt đầu để điều hướng các phiên bản công thức.


13
Thật không may, điều này là quá xa trong danh sách các câu trả lời nhưng là giải pháp tốt nhất. Đây là những gì tôi sử dụng, ngoại trừ thay vì sử dụng braumeister, tôi chỉ truy cập trang Homebrew GitHub của công thức mà tôi muốn (ví dụ: đối với gcc, hãy truy cập github.com/Homebrew/homebrew/blob/master/L Library / Formula / gcc.rb ) và sau đó tôi đi qua "Lịch sử" của tệp cho đến khi tôi nhận được phiên bản mà tôi muốn.
Guy Kogus

3
Đây chắc chắn là giải pháp tốt nhất trong trường hợp của tôi - cài đặt phiên bản Watchman cũ hơn không yêu cầu Xcode 8.1
Zachary Keener

3
Đây thực sự là cách dễ nhất để cài đặt phiên bản cũ hơn. Câu trả lời tuyệt vời
Martin

4
Điều này làm việc cho tôi nhưng tôi đã phải hủy liên kết phần mềm trước.
Brett Wagner

3
Đây là giải pháp đơn giản nhất đối với tôi. Điều này nên được đưa lên cao hơn vì câu trả lời được chấp nhận đã lỗi thời.
Tim W

35

Hầu hết các câu trả lời khác đã lỗi thời. Thật không may Homebrew vẫn không có một cách xây dựng trong cài đặt một phiên bản cũ, trừ khi phiên bản đó tồn tại như một công thức riêng biệt (ví dụ python@2, postgresql@9.4 ...).

May mắn thay, đối với các công thức khác, có một cách dễ dàng hơn nhiều so với mớ hỗn độn đã từng là cần thiết. Dưới đây là hướng dẫn đầy đủ:

  1. Tìm kiếm phiên bản chính xác trong nhật ký:

    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›
    

    Điều này sẽ hiển thị một danh sách các băm cam kết. Lấy một cái phù hợp (chủ yếu là nó phải khá rõ ràng và thường là cái gần đây nhất (tức là trên cùng).

  2. Tìm URL mà công thức nằm trong kho lưu trữ ngược dòng:

    brew info ‹formula› | grep ^From:
    
  3. Sửa URL:

    1. Thay thế github.combằngraw.githubusercontent.com
    2. Thay thế blob/masterbằng hàm băm cam kết mà chúng ta đã tìm thấy trong bước đầu tiên.
  4. Cài đặt phiên bản mong muốn bằng cách thay thế masterURL được tìm thấy trước đó bằng hàm băm cam kết, ví dụ:

    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
    

(Bước cuối cùng có thể bắt buộc phải chạy brew unlink ‹formula›trước.)


Nếu bạn đã sao chép hàm băm cam kết bạn muốn sử dụng, bạn có thể sử dụng một cái gì đó giống như ví dụ này để cài đặt phiên bản đó, thay thế giá trị và bashbằng hàm băm cam kết và công thức mong muốn của bạn.

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

Ví dụ này đang cài đặt bash 4.4.23 thay vì bash 5, mặc dù nếu bạn thực hiện brew upgradesau đó thì bash 5 sẽ được cài đặt trên đầu trang, trừ khi bạn thực hiện lần đầu tiên brew pin bash. Thay vào đó để làm cho việc này mượt mà hơn mà không cần ghim, trước tiên bạn nên cài đặt phiên bản mới nhất với brew install bash, sau đó brew unlink bash, sau đó cài đặt phiên bản cũ hơn bạn muốn theo tập lệnh ở trên, sau đó sử dụng brew switch bash 4.4.23để thiết lập liên kết tượng trưng cho phiên bản cũ hơn. Bây giờ brew upgradekhông nên ảnh hưởng đến phiên bản Bash của bạn. Bạn có thể brew switch bashlấy danh sách các phiên bản có sẵn để chuyển sang.


Thay thế bằng cách sử dụng một vòi chỉ tùy chỉnh cục bộ

Một cách khác để đạt được cùng một mục tiêu là:

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.

Điều này tạo ra một formula@versionvòi tùy chỉnh của bạn mà bạn có thể cài đặt theo ví dụ trên. Nhược điểm là bạn có thể vẫn cần brew unlink bashvà sau đó brew link bash@4.4.23để sử dụng phiên bản Bash cụ thể của bạn hoặc bất kỳ công thức nào khác.


1
Họ rõ ràng đã thay đổi cú pháp brew logđể bất kỳ bổ sung -Fhoặc --greptùy chọn nào đều thất bại đối với tôi.
dragon788

1
@ dragon788 Địa ngục đẫm máu, Homebrew 2 hoàn toàn vỡ òa brew log. Tôi không thể bận tâm để viết một phiên bản mới ngay bây giờ vì điều đó đòi hỏi phải phân tích chính xác thông điệp nhật ký git hoặc chạy git logtrực tiếp trên kho lưu trữ tương ứng. Và các thay đổi dường như thậm chí không đề cập đến sự thay đổi đột phá này. Ngoài khó chịu.
Konrad Rudolph

Trừ khi họ chấp nhận rằng sự thay đổi trong hành vi là một lỗi, có vẻ như External Commandcó thể phải hoạt động trong cấu trúc brewđể lấy lại kiểu git loglọc đó. docs.brew.sh/External-Commands
dragon788

Đây là nơi duy nhất tôi có thể tìm thấy brew extractcách sử dụng chính xác , cảm ơn!
dognotdog

Tôi sẽ đề nghị làm cho local0only tùy chỉnh chạm vào phần đầu tiên của câu trả lời của bạn. Nó thực sự có vẻ như là giải pháp tốt nhất tổng thể.
studgeek

29

Tôi vừa sử dụng Homebrew để quay lại Maven 2.2.1 kể từ khi brew install mavenMaven 3.0.3 được cài đặt đơn giản .

Trước tiên, bạn phải để lại maven dir ở đó

$ brew unlink maven

Sử dụng lệnh brew tap

$ brew tap homebrew / phiên bản
Nhân bản vào '/ usr / local / Library / Taps / homebrew-phiên bản' ...
từ xa: Đếm các đối tượng: 590, xong.
từ xa: Nén đối tượng: 100% (265/265), xong.
từ xa: Tổng cộng 590 (delta 362), tái sử dụng 549 (delta 325)
Đối tượng nhận: 100% (590/590), 117,49 KiB | 79 KiB / s, đã xong.
Giải quyết deltas: 100% (362/382), đã hoàn tất.
Khai thác 50 công thức

Bây giờ bạn có thể cài đặt công thức maven2:

$ brew cài đặt maven2
==> Đang tải xuống 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 tệp, 3,1M, được xây dựng trong 6 giây
$ mvn - chuyển đổi
Apache Maven 2.2.1 (r801777; 2009-08-06 12: 16: 01-0700)
Phiên bản Java: 1.6.0_37
Trang chủ Java: / System / L Library / Java / JavaVirtualMachines / 1.6.0.jdk / Content / Home
Ngôn ngữ mặc định: en_US, mã hóa nền tảng: MacRoman
Tên hệ điều hành: "mac os x" phiên bản: "10.7.4" arch: "x86_64" Gia đình: "mac" 

Chỉnh sửa: Bạn cũng có thể chỉ brew switch maven 2.2.1để chuyển sang một phiên bản khác.

Chỉnh sửa: Dự án Apache Maven tổ chức lại repo của họ. Cập nhật câu trả lời này cho tài khoản cho sự thay đổi này.


Điều này rất hữu ích. Lưu ý, nền tảng apache đã sắp xếp lại các nhị phân maven thành các thư mục cụ thể của phiên bản (1,2,3), vì vậy bạn sẽ cần chỉnh sửa maven.rb cho 2.2.1 và có lẽ các cấu trúc khác để phù hợp với cấu trúc mới. Ví dụ: nhị phân cho 2.2.1 được đặt tại: apache.org/dist/maven/maven-2/2.2.1/binaries/ ,. Lưu ý "maven-2 / 2.2.1 /" trong url.
Charles Forcey

@CharlesForcey Bạn đã đúng về việc maven dist repo được tổ chức lại. Tôi sẽ cập nhật câu trả lời để sử dụng brew tap để sử dụng công thức maven2 cũ hơn. Cảm ơn các bình luận.
Cameron Goodale

21

Dựa trên quy trình làm việc được mô tả bởi bản cập nhật 1 của @tschundeee@ Debilski , tôi đã tự động hóa quy trình và thêm dọn dẹp trong tập lệnh này .

Tải về nó , đặt nó trong đường dẫn của bạn và brewv <formula_name> <wanted_version>. Đối với OP cụ thể, nó sẽ là:

cd path/to/downloaded/script/
./brewv postgresql 8.4.4

:)


4
tuyệt vời. Tại sao điều này không có trong bia?
Adrian

3
Không tìm thấy nữa :(
D-32

18

Một câu trả lời được cập nhật kể từ đó thêm vào những gì @ lance-pollard đã đăng là câu trả lời hoạt động.

Cách cài đặt phiên bản cụ thể của Công thức (công thức được sử dụng trong ví dụ này là terraform):

  1. Tìm tệp công thức của bạn, ví dụ: https://github.com/Homebrew/homebrew-core/blob/master/Formula/terraform.rb
  2. Nhận phiên bản cam kết từ lịch sử của github với https://github.com/Homebrew/homebrew-core/commits/master/Formula/terraform.rb hoặc git log master -- Formula/terraform.rbnếu bạn đã nhân bản repo cục bộ.
  3. Lấy URL git liệu với các phiên bản của công thức của bạn cam kết: Nếu liên kết công thức trong github.com là https://github.com/Homebrew/homebrew-core/blob/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb , URL liệu của bạn sẽ được: https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
  4. Cài đặt nó với: brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb

Để có được URL git thô trong bước 3, bạn cũng có thể chỉ cần nhấn nút "Nguyên" và sao chép URL mà trình duyệt đưa bạn đến.
Brian đứng đầu

15

Phương thức chính thức (đánh giá từ phản hồi cho https://github.com/Homebrew/brew/issues/6028 )

Thật không may, Homebrew vẫn không có cách cài đặt rõ ràng để cài đặt phiên bản cũ hơn.

May mắn thay, đối với hầu hết các công thức, có một cách dễ dàng hơn nhiều so với mớ hỗn độn đã từng là cần thiết. Dưới đây là hướng dẫn đầy đủ sử dụng bashlàm ví dụ:

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.

Điều này tạo ra formula@versiontrong vòi tùy chỉnh của bạn mà bạn có thể cài đặt theo ví dụ trên. Một lưu ý quan trọng là bạn có thể cần phải brew unlink bashcài đặt trước đó phiên bản công thức mặc định / mới nhất và sau đó brew link bash@4.4.23để sử dụng phiên bản Bash cụ thể của bạn (hoặc bất kỳ công thức nào khác có cài đặt phiên bản mới nhất và phiên bản cũ hơn).

Một nhược điểm tiềm năng của phương pháp này là bạn không thể dễ dàng chuyển đổi qua lại giữa các phiên bản vì theo brew đó là một "công thức khác nhau".

Nếu bạn muốn có thể sử dụng, brew switch $FORMULA $VERSIONbạn nên sử dụng phương pháp tiếp theo.


Phương pháp kịch bản (Khuyến nghị)

Ví dụ này cho thấy việc cài đặt bash 4.4.23 cũ hơn, một ví dụ hữu ích vì bashcông thức hiện đang cài đặt bash 5.

  • Đầu tiên cài đặt phiên bản mới nhất của công thức với brew install bash
  • sau đó brew unlink bash
  • sau đó cài đặt phiên bản cũ hơn bạn muốn cho các đoạn bên dưới
  • cuối cùng sử dụng brew switch bash 4.4.23để thiết lập các liên kết tượng trưng cho phiên bản của bạn

Nếu bạn đã thực hiện brew upgradesau khi cài đặt phiên bản cũ hơn mà không cài đặt phiên bản mới nhất trước thì phiên bản mới nhất sẽ được cài đặt ghi đè phiên bản cũ của bạn, trừ khi bạn thực hiện lần đầu tiênbrew pin bash .

Các bước ở đây TRÁNH ghim vì dễ quên và bạn có thể ghim vào phiên bản không an toàn trong tương lai (xem Shellshock / vv). Với thiết lập brew upgradenày, không nên ảnh hưởng đến phiên bản Bash của bạn và bạn luôn có thể chạybrew switch bash để lấy danh sách các phiên bản có sẵn để chuyển sang.

Sao chép và dán và chỉnh sửa các exportdòng từ đoạn mã bên dưới để cập nhật với phiên bản và tên công thức mong muốn của bạn, sau đó sao chép và dán phần còn lại như hiện tại và nó sẽ sử dụng các biến đó để làm điều kỳ diệu.

# 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

Khi bạn chắc chắn phiên bản tồn tại trong công thức, bạn có thể sử dụng như sau:

# 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}')

Khi bạn đã xuất hàm băm cam kết bạn muốn sử dụng, bạn có thể sử dụng hàm này để cài đặt phiên bản đó của gói.

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

Thực hiện theo các hướng dẫn trong đầu ra công thức để đặt nó vào PATH của bạn hoặc đặt nó làm vỏ mặc định của bạn.


12

Trên phiên bản mới nhất của homebrew (0.9.5 khi viết bài này), sẽ có một công thức cụ thể cho phiên bản của keb homebrew mà bạn muốn cài đặt. Thí dụ:

$ brew search mongodb
mongodb    mongodb24  mongodb26

Sau đó chỉ cần làm brew install mongodb26như bình thường.

Trong trường hợp bạn đã cài đặt phiên bản mới nhất, hãy đảm bảo hủy liên kết phiên bản mới nhất và liên kết phiên bản mong muốn : brew unlink mongodb && brew link mongodb26.


Trong khi điều này có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
Erik

1
@Erik Cảm ơn, đã sửa.
Alex Sharp

11

Vấn đề homebrew/versionslà ai đó phải có phiên bản phần mềm cụ thể được liệt kê trong kho để bạn có thể sử dụng nó. Ngoài ra, vì brew versionskhông còn được hỗ trợ, nên cần một giải pháp khác. Đối với các giải pháp cho biết việc sử dụng brew switch, điều này sẽ chỉ hoạt động nếu bạn chưa thực hiện brew cleanupvì phiên bản cần tồn tại trên máy tính của bạn.

Tôi gặp vấn đề với việc muốn cài đặt một phiên bản cũ hơn docker-machinekhông được liệt kê trong đó homebrew/versions. Tôi đã giải quyết điều này bằng cách sử dụng phần bên dưới, phần mềm này cũng hoạt động với mọi phần mềm cài đặt bia. Ví dụ dưới đây sẽ sử dụng docker-machinelàm gói tôi muốn hạ cấp từ phiên bản 0.5.0 xuống 0.4.1.

  1. Chuyển đến Formulathư mục homebrew của bạn .
    Bạn có thể xác định điều này bằng cách chạy brew info [any package name]. Ví dụ, brew info docker-machinecho tôi một dòng chỉ cho tôi một đường dẫn - /usr/local/Cellar/docker-machine/0.5.0. Điều này cho tôi biết rằng trên máy của tôi, homebrew được cài đặt tại /usr/localFormula thư mục của tôi được đặt theo mặc định tại/usr/local/Library/Formula

  2. Xác định vị trí tệp công thức cụ thể (.rb) cho gói của bạn. Vì tôi muốn hạ cấp docker-machine, tôi có thể xem một docker-machine.rbtập tin.

  3. Lấy lịch sử phiên bản cho tệp công thức này . Nhập git log docker-machine.rb. Điều này sẽ liệt kê ra lịch sử cam kết đầy đủ cho tập tin này. Bạn sẽ thấy đầu ra như thế này:

    ...hơn 

    cam kết 20c7abc13d2edd67c8c1d30c407bd5e31229cacc
    Tác giả: BrewTestBot 
    Ngày: Thu ngày 5 tháng 11 16:14:18 2015 +0000

        docker-machine: cập nhật chai 0.5.0.

    cam kết 8f615708184884e501bf5c16482c95eff6aea637
    Tác giả: Vincent Lesierse 
    Ngày: Thứ ba 27 tháng 10, 22:30:30 +0100

        docker-máy 0.5.0

        Cập nhật docker-machine lên 0.5.0

        Đóng # 45403.

        Đã ký tắt: Dominyk Tiller 

    cam kết 5970e1af9b13dcbeffd281ae57c9ab90316ba423
    Tác giả: BrewTestBot 
    Ngày: Thứ Hai 21 tháng 9 14:04:04 2015 +0100

        docker-machine: cập nhật chai 0.4.1.

    cam kết 18fcbd36d22fa0c19406d699308fafb44e4c8dcd
    Tác giả: BrewTestBot 
    Ngày: CN ngày 16 tháng 8 09:05:56 2015 +0100

        docker-machine: cập nhật chai 0.4.1.

    ...hơn

Phần khó khăn là tìm cam kết mới nhất cho phiên bản cụ thể mà bạn muốn. Trong phần trên, tôi có thể nói phiên bản 0.4.1 mới nhất đã được cam kết với thẻ cam kết này : commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423. Các cam kết trên điểm này bắt đầu sử dụng phiên bản 0.5.0 (các mục nhật ký git được liệt kê từ ngày muộn nhất đến ngày sớm nhất).

  1. Lấy phiên bản trước của tệp công thức. Sử dụng thẻ cam kết từ bước # 3 (bạn có thể sử dụng 6 ký tự đầu tiên), bạn có thể nhận được phiên bản cũ hơn của tệp công thức bằng cách sử dụng như sau:

    git checkout 5970e1 docker-machine.rb

  2. Gỡ cài đặt phiên bản gói hiện tại của bạn. Chỉ cần chạy các lệnh brew bình thường để gỡ cài đặt phiên bản hiện tại của gói của bạn.
    Ví dụ.brew uninstall docker-machine

  3. Cài đặt phiên bản gói cũ hơn Bây giờ, bạn có thể chạy lệnh brew install thông thường và nó sẽ cài đặt công thức mà bạn đã thanh toán. Ví dụ.brew install docker-machine

Bạn có thể cần phải liên kết lại bằng cách sử dụng brew link docker-machinenếu cần thiết.

Nếu bất cứ lúc nào bạn muốn trở lại phiên bản mới nhất của gói cụ thể, hãy vào thư mục Công thức và đưa ra các lệnh sau trên tệp công thức của bạn (.rb)

git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb

Sau đó, bạn có thể brew uninstall docker-machinebrew install docker-machineđể có được phiên bản mới nhất và tiếp tục phát triển.


1
Rất kỹ lưỡng viết lên @rchawdry, cảm ơn bạn. BTW: để tìm cam kết phù hợp với phiên bản bạn muốn nhanh chóng thêm tham số --grep git log --grep 0.4.1 docker-machine.rb.
Jerry Mindek 10/11/2015

Đối với tôi, con đường là/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
akauppi

Tôi không thể tìm thấy đủ lịch sử phiên bản cho sản cairoxuất bia theo cách này. Câu trả lời @ sealocal cho thấy nhiều hơn, vì một số lý do.
akauppi

11

Đó là năm 2020 và hầu hết các câu trả lời đã lỗi thời

Tình hình của tôi: postgresqlđược nâng cấp từ 11 lên 12 một cách tình cờ. Tôi muốn giữ 11.

  1. Dừng DB:
brew services stop postgresql
  1. Cài đặt Postgres 11:
brew install postgresql@11
  1. Kích hoạt nó:
brew link postgresql@11 --force
  1. (Tùy chọn) Đổi tên thư mục dữ liệu DB từ postgresthành postgres@11:
cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11
  1. Bắt đầu DB:
brew services start postgresql@11

Nếu bạn có bất kỳ lỗi nào, hãy kiểm tra /usr/local/var/log/postgresql@11.log(chú ý @ 11).


6
Điều này chỉ hoạt động đối với trường hợp đặc biệt của postgresql @ 11 được các nhà bảo trì Homebrew lưu giữ rõ ràng để giúp di chuyển kho dữ liệu (được thực hiện bằng lệnh đặc biệt brew postgresql-upgrade-database). Câu trả lời này không hữu ích cho hầu hết các công thức khác.
Adam Wróbel

@ AdamWróbel Tôi đã quyết định điều này là tốt để trả lời câu hỏi ban đầu về Postgres . brew postgresql-upgrade-databaselà, tốt, để nâng cấp . Câu trả lời của tôi là về việc sử dụng một phiên bản Postgres cũ hơn . Đơn giản chỉ cần chuyển đổi nhị phân sẽ không hoạt động.
Max Malysh

Người dùng NodeJS không sử dụng trình quản lý phiên bản nvm, ví dụ: FYI Tôi đã may mắn sử dụng kỹ thuật này cho các bản phát hành LTS cũ hơn. Ít nhất tại thời điểm viết v10 & v12 nên có sẵn, ví dụ: brew install node@12 Formulae.brew.sh/formula/node
paws

9

Cài đặt phiên bản gói bia cũ (ví dụ Flyway 4.2.0)

Tìm thư mục git homebrew địa phương hoặc bản sao Homebrew / homebrew-core tại địa phương

cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/

HOẶC LÀ

git clone git@github.com:Homebrew/homebrew-core.git

Liệt kê tất cả các phiên bản có sẵn

git log master -- Formula/flyway.rb

Sao chép ID cam kết cho phiên bản bạn muốn và cài đặt trực tiếp

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/793abfa325531415184e1549836c982b39e89299/Formula/flyway.rb


Tại sao không chỉ đơn giản là chạy brew install Formula/flyway.rbtừ homebrew-corethư mục? nó làm việc cho tôi mà không cần sử dụng raw.github..địa chỉ
kangkyu

9

Tôi đã thử hầu hết các giải pháp ở đây và chúng đã lỗi thời. Tôi đã phải kết hợp một số ý tưởng từ đây với công việc của riêng tôi. Kết quả là tôi đã tạo ra một kịch bản để giúp tôi thực hiện công việc nặng nhọc mà bạn có thể tìm thấy ở đây

Sử dụng:

brewv.sh formula_name desired_version

6

nó có thể được thực hiện rất dễ dàng cho phiên bản cuối cùng của bia.

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)

2
... Nếu ai đó bận tâm tạo ra một công thức phiên bản cho gói đó.
clacke

6

Không ai trong số này thực sự hoạt động cho trường hợp của tôi (Python), vì vậy tôi sẽ thêm 2 xu của mình:

cd `brew --prefix`
git log Library/Formula/python.rb

Đầu ra trông như thế này:

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.

...

Tôi muốn phiên bản 2.7.11để hàm băm của tôi là cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9(hoặc cf5da05viết tắt). Tiếp theo, tôi kiểm tra phiên bản đó và cài đặt công thức python:

git checkout cf5da05
brew install python

Cuối cùng, dọn dẹp:

git checkout master

2
Cuộc sống thay đổi và câu trả lời này là phù hợp nhất. Đừng quên HOMEBREW_NO_AUTO_UPDATEvà đọc github.com/Homebrew/brew/issues/1188
Wile E.

Các lệnh chính xác là cd brew --prefix /Homebrewgit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
Iulian Onofrei

Nhưng ngay cả điều đó không làm việc vì /Library/Tapsbị bỏ qua.
Iulian Onofrei

Đừng quên về HOMEBREW_NO_AUTO_UPDATE. Có, đừng quên điều bạn cần cho đến khi bạn phát hiện ra bạn cần nó. xD
Josh Habdas

Cái này thì sao? HOMEBREW_NO_INSTALL_CLEANUPđây không phải là thứ bạn cần nhớ sao?
kangkyu

6

Nếu bạn không thể tìm thấy phiên bản của mình với brew search <formula> , bạn cũng có thể thử xem nhật ký cam kết cho công thức của mình để tìm phiên bản bạn muốn:

đây là một ví dụ để cài đặt một phiên bản nginx cũ hơn thông qua brew:

Từ đó, chúng ta có thể cài đặt 1.6.3với url sha và git thô:

brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb


3

Hiện tại các cách cũ để cài đặt các phiên bản công thức cụ thể đã không được chấp nhận. Vì vậy, có vẻ như chúng ta phải sử dụng brew edit [formula]. Ví dụ: chúng tôi muốn cài đặt 62.1phiên bản icu4c(cần thiết, ví dụ postgresql 10.5). Sau đó, bạn phải

> brew edit icu4c
# drops you to editor

Ở đây bạn phải thay đổi url, versionsha256(có lẽ mirror) thành các 62.1chuỗi tương ứng .

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"

sau đó chạy brew reinstall icu4cđể tải 62.1phiên bản cuối cùng


Làm thế nào để có được sha256 ? trong trường hợp của tôihttps://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip
simo

1

Cập nhật dòng 8 của Thư viện / Công thức / postgresql.rb

http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2

Và MD5 trên dòng 9 đến

fcc3daaf2292fa6bf1185ec45e512db6

Lưu và thoát.

brew install postgres
initdb /usr/local/var/postgres

Bây giờ trong giai đoạn này, bạn có thể phải đối mặt với postgresql could not create shared memory segmentlỗi, để khắc phục sự cập nhật /etc/sysctl.confnhư sau:

kern.sysv.shmall=65536
kern.sysv.shmmax=16777216

Hãy thử initdb /usr/local/var/postgreslại, và nó sẽ chạy trơn tru.

Để chạy postgresql khi bắt đầu

launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist

Mong rằng sẽ giúp :)


1

Tôi vừa sao chép một bản phát hành cũ hơn của elaticsearch vào /usr/local/Cellar/elasticsearchthư mục.

$ 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

Đó là nó. Có lẽ nó hữu ích cho bất cứ ai.


Một hack xấu xí. Nhưng, vâng, nó cũng hoạt động với tôi, trong khi tôi đang cố gắng tìm kiếm và cài đặt một phiên bản cũ của lãnh sự! Chúc mừng.
darkdefender27

0

Tôi đã quyết định, chống lại sự phán xét tốt hơn của tôi, để tạo ra một công thức cho Maven 3.1.1, thứ homebrew/versionskhông có. Để làm điều này:

  1. Tôi rẽ nhánh homebrew/versionstrên github.
  2. Tôi liên kết từ $(brew --prefix)/Library/Tapsbản sao làm việc tại địa phương của ngã ba của tôi. Tôi sẽ gọi đây my-homebrew/versions.
  3. Tôi đã thử nghiệm bằng cách chỉ định công thức là my-homebrew/versions/<formula>.
  4. Tôi đã gửi một yêu cầu kéo homebrew/versionscho công thức mới của tôi.

Yay


0

Đối với các phiên bản hiện không có trong công thức pha chế mặc định, bạn có thể dễ dàng tạo một vòi riêng bằng công cụ từ https://github.com/buildtools-version-taps/homebrew-versions-tap-tool


Công cụ này dường như được tích hợp vào Homebrew bây giờ? Bạn có thể brew tap-new user/repovà sau đó brew extract --version='Major.minor' FORMULA user/repovà sau đó brew install FORMULA@Major.minor.
dragon788

0

Tôi đã tạo ra một công cụ để giảm bớt quá trình quy định trong câu trả lời này .

Để tìm gói pkgcó phiên bản a.b.c, hãy chạy:

$ brew-install-specific pkg@a.b.c

Điều này sẽ liệt kê các cam kết trên pkgcông thức homebrew có đề cập đến phiên bản đã cho cùng với các url GitHub của chúng.

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: 

Xác minh cam kết từ URL đã cho và nhập chỉ mục của cam kết đã chọn.

Select index: 2
Run:
  brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb

Sao chép và chạy lệnh đã cho để cài đặt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.