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.
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.
Câu trả lời:
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:
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 switch
là 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 switch
chỉ 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 switch
chủ 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.
Đặ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/versions
vò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.
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 versions
lệ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/boneyard
trướ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 -S
tì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, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
là 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.
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.
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 upgrade
thủ 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
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
.
brew update
thiết lập repo Git của nó.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
, sau đó bạn có thể sử dụng git checkout 4cce79d -- Formula/go.rb
và HOMEBREW_NO_AUTO_UPDATE=1 brew install go
.
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
fatal: Not a git repository (or any of the parent directories): .git
. Tôi chỉ cd
vào thư mục thay thế (không có FORMULANAME.rb), sau đó thực hiệngit checkout 120938
cd /usr/local
đầu tiên.
brew unlink FORMULANAME
brew versions <formula>
không được hỗ trợ nữa.
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 --overwrite
trong đó.
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
Vì brew switch
chỉ 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 .
Cập nhật: 15/1/2015
brew install <url>
(có thể phải brew unlink
đầu tiên, ví dụ brew unlink docker
)brew switch docker 1.3.3
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
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.
Raw
nút trên tập tin gì?!
brew log <formula>
Theo dòng gợi ý của @ Halfcube, điều này thực sự hiệu quả:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
package@version
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ó.
brew unlink
trước brew install
phiên bản khác.
mxcl
?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb
như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?
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
brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb
dường như thất bại với lỗi cú pháp.
raw
URL
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
. COMMIT
có thể được tìm thấy bằng cách truy cập github.com/Homebrew/homebrew-core/commits/master/Formula/ .
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.
Nhấn t
trên bàn phím của bạn để kích hoạt công cụ tìm tập tin.
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 .
Nhìn vào lịch sử sửa đổi bằng cách nhấp vào History
nú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:
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.
Nhấp vào nút "Xem" để xem nguồn cho tệp mysql.rb sau khi cam kết được áp dụng.
Sau đó nhấp vào nút "Nguyên" để xem nguồn thô.
Sao chép URL. Ngoài ra, hãy tự xây dựng URL bằng mysql.rb
tê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).
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.
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 đủ:
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).
Tìm URL mà công thức nằm trong kho lưu trữ ngược dòng:
brew info ‹formula› | grep ^From:
Sửa URL:
github.com
bằngraw.githubusercontent.com
blob/master
bằng hàm băm cam kết mà chúng ta đã tìm thấy trong bước đầu tiên.Cài đặt phiên bản mong muốn bằng cách thay thế master
URL đượ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à bash
bằ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 upgrade
sau đó 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 upgrade
không nên ảnh hưởng đến phiên bản Bash của bạn. Bạn có thể brew switch bash
lấy danh sách các phiên bản có sẵn để chuyển sang.
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@version
vò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 bash
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.
brew log
để bất kỳ bổ sung -F
hoặc --grep
tùy chọn nào đều thất bại đối với tôi.
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 log
trự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.
External Command
có thể phải hoạt động trong cấu trúc brew
để lấy lại kiểu git log
lọc đó. docs.brew.sh/External-Commands
brew extract
cách sử dụng chính xác , cảm ơn!
Tôi vừa sử dụng Homebrew để quay lại Maven 2.2.1 kể từ khi brew install maven
Maven 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.
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 và @ 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
:)
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
):
git log master -- Formula/terraform.rb
nếu bạn đã nhân bản repo cục bộ.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
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 bash
là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@version
trong 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 bash
cà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 $VERSION
bạn nên sử dụng phương pháp tiếp theo.
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ì bash
công thức hiện đang cài đặt bash 5.
brew install bash
brew unlink bash
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ạnNếu bạn đã thực hiện brew upgrade
sau 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 upgrade
nà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 export
dò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.
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 mongodb26
như 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
.
Vấn đề homebrew/versions
là 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 versions
khô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 cleanup
vì 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-machine
khô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-machine
làm gói tôi muốn hạ cấp từ phiên bản 0.5.0 xuống 0.4.1.
Chuyển đến Formula
thư 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-machine
cho 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/local
và Formula
thư mục của tôi được đặt theo mặc định tại/usr/local/Library/Formula
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.rb
tập tin.
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).
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
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
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-machine
nế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-machine
và brew install docker-machine
để có được phiên bản mới nhất và tiếp tục phát triển.
git log --grep 0.4.1 docker-machine.rb
.
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
cairo
xuấ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.
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.
brew services stop postgresql
brew install postgresql@11
brew link postgresql@11 --force
postgres
thành postgres@11
:cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11
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).
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.
brew postgresql-upgrade-database
là, 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.
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
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/
HOẶC LÀ
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
từ homebrew-core
thư mục? nó làm việc cho tôi mà không cần sử dụng raw.github..
địa chỉ
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
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)
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 cf5da05
viế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
HOMEBREW_NO_AUTO_UPDATE
và đọc github.com/Homebrew/brew/issues/1188
cd
brew --prefix /Homebrew
vàgit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Taps
bị bỏ qua.
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
HOMEBREW_NO_INSTALL_CLEANUP
đây không phải là thứ bạn cần nhớ sao?
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:
xem nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
Từ đó, chúng ta có thể cài đặt 1.6.3
với url sha và git thô:
brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
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.1
phiê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
, version
và sha256
(có lẽ mirror
) thành các 62.1
chuỗ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.1
phiên bản cuối cùng
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
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 segment
lỗi, để khắc phục sự cập nhật /etc/sysctl.conf
như sau:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Hãy thử initdb /usr/local/var/postgres
lạ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 :)
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/elasticsearch
thư 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.
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/versions
không có. Để làm điều này:
homebrew/versions
trên github.$(brew --prefix)/Library/Taps
bả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
.my-homebrew/versions/<formula>
.homebrew/versions
cho công thức mới của tôi.Yay
Đố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
brew tap-new user/repo
và sau đó brew extract --version='Major.minor' FORMULA user/repo
và sau đó brew install FORMULA@Major.minor
.
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 pkg
có 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 pkg
cô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.
postgresql
là 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ưbash
có 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