Homebrew устанавливает конкретную версию формулы?

Как установить конкретную версию формулы в homebrew? Например, postgresql-8.4.4 вместо последнего 9.0.

Ответы

Ответ 1

TL;DR: brew install [email protected] Для получения более подробной информации см. Ответ ниже.


* (Я отредактировал мой ответ, чтобы дать более подробный рабочий процесс для установки/использования старых версий программного обеспечения с homebrew. Не стесняйтесь добавлять примечания, если вы нашли старую версию лучше.)

Начнем с самого простого случая:

1) Проверьте, установлена ли уже версия (но не активирована)

Когда homebrew устанавливает новую формулу, он помещает ее в каталог с версиями, например /usr/local/Cellar/postgresql/9.3.1. Только символические ссылки на эту папку устанавливаются глобально. В принципе, это позволяет довольно легко переключаться между двумя установленными версиями. (*)

Если вы использовали homebrew дольше и никогда не удаляли более старые версии (например, с помощью brew cleanup), есть вероятность, что какая-то более старая версия вашей программы все еще может присутствовать. Если вы хотите просто активировать предыдущую версию, brew switch - самый простой способ сделать это.

Проверьте с помощью brew info postgresql (или brew switch postgresql <TAB>), установлена ли более старая версия:

$ 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

Мы видим, что какая-то старая версия уже установлена. Мы можем активировать его с помощью 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

Давайте еще раз проверим, что активировано:

$ 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

Обратите внимание, что звезда * перешла на новую активированную версию

(*) Обратите внимание, что brew switch работает только до тех пор, пока все зависимости старой версии все еще существуют. В некоторых случаях может потребоваться перестройка старой версии. Поэтому использование brew switch наиболее полезно, когда нужно переключаться между двумя версиями, не слишком далеко друг от друга.

2) Проверьте, доступна ли версия как тап

Особенно для крупных программных проектов весьма вероятно, что существует достаточно высокий спрос на несколько (потенциально несовместимых с API) основных версий определенного программного обеспечения. По состоянию на март 2012 года Homebrew 0.9 предоставляет механизм для этого: brew tap и репозиторий homebrew версий.

Этот репозиторий версий может включать бэкпорты более старых версий для нескольких формул. (В основном только крупные и знаменитые, но, конечно, у них также есть несколько формул для postgresql.)

brew search postgresql покажет вам, где искать:

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

Мы можем просто установить его, набрав

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

Обратите внимание, что это автоматически homebrew/versions нажатия homebrew/versions version. (Проверьте с помощью brew tap, удалите с помощью brew untap homebrew/versions.) Следующее было бы эквивалентно:

$ brew tap homebrew/versions
$ brew install postgresql8

До тех пор, пока формулы версий в бэкпорте остаются актуальными, такой подход, вероятно, является лучшим способом борьбы со старым программным обеспечением.

3) Попробуйте какую-нибудь формулу из прошлого

Следующие подходы перечислены в основном для полноты. Оба пытаются воскресить какую-то формулу нежити из хранилища варева. Из-за измененных зависимостей, изменений API в спецификации формулы или просто изменения URL-адреса загрузки, вещи могут работать, а могут и не работать.

Поскольку весь каталог формул представляет собой репозиторий git, можно установить определенные версии с помощью простых команд git. Однако нам нужно найти способ получить коммит, где была доступна старая версия.

а) исторические времена

В период с августа 2011 года по октябрь 2014 года у homebrew была команда brew versions, которая выдавала все доступные версии с соответствующими им хэшами SHA. По состоянию на октябрь 2014 года, вы должны сделать brew tap homebrew/boneyard чтобы использовать его. Как следует из названия крана, вы должны делать это только в крайнем случае.

Например

$ 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

Как вы можете видеть, он советует не использовать его. Доморощенный выплевывает все версии, которые он может найти с его внутренней эвристикой и показывает вам способ извлечь старые формулы. Давай попробуем.

# 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

Теперь, когда установлена более старая версия postgresql, мы можем переустановить последнюю формулу, чтобы сохранить наш репозиторий в чистоте:

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

brew switch - ваш друг, чтобы переключаться между старым и новым.

б) доисторические времена

Для особых нужд мы также можем попробовать копаться в домашнем репо.

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

git log -S ищет все коммиты, в которых строка '8.4.4' была добавлена или удалена в файле Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb. В результате мы получаем два коммита.

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

Очевидно, что fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422 коммит был fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422. Поскольку этот коммит довольно старый, попробуйте понизить версию полной версии homebrew (таким образом, API формулы более или менее гарантированно будет действительным):

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

Вы можете пропустить последнюю команду, чтобы сохранить ссылку в вашем git-репозитории.

Одно замечание: при проверке старого коммита вы временно понижаете версию своего доморощенного варра. Итак, вы должны быть осторожны, так как некоторые команды в homebrew могут отличаться от самой последней версии.

4) Вручную написать формулу

Это не слишком сложно, и вы можете загрузить его в свой собственный репозиторий. Раньше была Homebrew-Versions, но сейчас она больше не выпускается.

А.) Бонус: закрепление

Если вы хотите сохранить определенную версию, скажем, postgresql, и не допускать ее обновления при выполнении естественного brew update; brew upgrade Процедура brew update; brew upgrade Brew, вы можете закрепить формулу:

$ brew pin postgresql

Закрепленные формулы перечислены в /usr/local/Library/PinnedKegs/ и как только вы захотите внести последние изменения и обновления, вы можете открепить их снова:

$ brew unpin postgresql

Ответ 2

Простой рабочий процесс

Теперь, когда Homebrew/версии устарели, Homebrew/core поддерживает несколько версий формул с новым форматом именования.

Чтобы установить определенную версию, например. postgresql 9.5 вы просто запускаете:

$ brew install [email protected]

Чтобы просмотреть доступные версии, выполните поиск с помощью @:

$ brew search [email protected]
==> Searching local taps...
[email protected][email protected]        [email protected]        [email protected]

Ответ 3

В настоящее время гораздо проще установить более старую версию формулы, которую вы ранее устанавливали. Просто используйте

brew switch [formula] [version]

Например, я регулярно чередуюся между Node.js 0.4.12 и 0.6.5:

brew switch node 0.4.12
brew switch node 0.6.5

Так как brew switch просто меняет символические ссылки, это очень быстро. См. Дополнительную документацию на Wiki Homebrew в разделе Внешние команды.

Ответ 4

Обновление: 15.01.2012

  • Найдите историю фиксации нужного программного обеспечения и версии. например, мне нужно переключиться с докеров версии 1.4.1 на 1.3.3: https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb
  • Просмотрите файл с помощью этой кнопки: enter image description here
  • Нажмите кнопку Raw: List item
  • Скопируйте URL-адрес (URL-адрес docker.rb в этом примере) из адресной строки
  • brew install <url> (возможно, сначала нужно brew unlink, например, brew unlink docker)
  • brew switch docker 1.3.3
  • Вернитесь к докеру 1.4.1 brew switch docker 1.4.1

С этой сутью

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

Ответ 5

Я нашел лучшее альтернативное решение, а затем другие сложные решения.

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

Это загрузит и установит PostgreSQL 8.4.8


Я нашел это решение, начав выполнять шаги по поиску репо и комментарий в репо.

После небольшого исследования выяснилось, что у кого-то есть коллекция редких формул до brew с.


Если вы ищете MySQL 5.1.x, попробуйте это.

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

Ответ 6

В соответствии с рекомендациями @halfcube, это работает очень хорошо:

  1. Найдите нужную библиотеку по адресу https://github.com/Homebrew/homebrew-core/tree/master/Formula.
  2. Нажмите на нее: https://github.com/Homebrew/homebrew-core/blob/master/Formula/postgresql.rb
  3. Нажмите кнопку "История", чтобы просмотреть старые коммиты: https://github.com/Homebrew/homebrew-core/commits/master/Formula/postgresql.rb
  4. Выберите тот, который вы хотите: "postgresql: обновить версию до 8.4.4", https://github.com/Homebrew/homebrew-core/blob/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
  5. Нажмите "сырую" ссылку: 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

Ответ 7

Вы можете использовать стратегию определения формулы и конкретного коммита в истории формулы, которая соответствует версии пакета, который вы хотите установить.

  1. Перейдите на https://github.com/Homebrew/homebrew-core

  2. Нажмите t на клавиатуре, чтобы активировать поиск файлов.

  3. Определите формулу, которая выглядит наиболее релевантной, возможно: Formula/mysql.rb, которая Formula/mysql.rb вас в местоположение файла forumla: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb.

  4. Посмотрите на историю изменений, нажав на History кнопку, которая находится в https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb. Если вы заинтересованы в MySQL 5.7.10, вы можете щелкнуть последнюю версию до 5.7.11, которая переходит к фиксации GitHub:

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

ПРИМЕЧАНИЕ. Возможно, вам придется просматривать историю коммитов в вашей консоли в соответствии с рекомендациями GitHub, если история коммитов не загружается в вашем браузере. Замените коммит SHA выше в URL, если вы хотите увидеть этот коммит на GitHub. Кроме того, перейдите к шагу 7 ниже.

  1. Нажмите кнопку "Просмотр", чтобы просмотреть исходный файл mysql.rb после применения фиксации.

  2. Затем нажмите кнопку "Raw", чтобы просмотреть исходный код.

  3. Скопируйте URL. В качестве альтернативы, создайте URL-адрес самостоятельно с mysql.rb файла mysql.rb чтобы идентифицировать вашу формулу и конкретную версию этой формулы (идентифицируемой SHA коммитом в URL-адресе ниже).

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

  4. Установите его с помощью $ brew install [URL from step 7]

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

ПРИМЕЧАНИЕ. Этот ответ был обновлен с учетом удаления веб-сайта braumeister.org. Применяется тот же принцип, braumeister просто предоставил удобный для новичков способ навигации по формулам.

Ответ 8

Я просто использовал Homebrew, чтобы вернуться к Maven 2.2.1, поскольку простой brew install maven установлен Maven 3.0.3.

Сначала вы должны оставить там maven dir, чтобы

$ brew unlink maven

Используйте команду brew tap

$ brew tap homebrew/versions
Cloning into '/usr/local/Library/Taps/homebrew-versions'...
remote: Counting objects: 590, done.
remote: Compressing objects: 100% (265/265), done.
remote: Total 590 (delta 362), reused 549 (delta 325)
Receiving objects: 100% (590/590), 117.49 KiB | 79 KiB/s, done.
Resolving deltas: 100% (362/362), done.
Tapped 50 formula

Теперь вы можете установить формулу maven2:

$ brew install maven2
==> Downloading 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 files, 3.1M, built in 6 seconds
$ mvn --version
Apache Maven 2.2.1 (r801777; 2009-08-06 12:16:01-0700)
Java version: 1.6.0_37
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x" version: "10.7.4" arch: "x86_64" Family: "mac" 

Edit: Вы также можете просто brew switch maven 2.2.1 переключиться на другую версию.

Edit: Проект Apache Maven реорганизовал свое репо. Обновлен этот ответ для учета этого изменения.

Ответ 9

На основе рабочего процесса, описанного @tschundeee и @Debilskis update 1, я автоматизировал процедуру и добавлена ​​очистка в этот script.

Скачайте его, поместите его в свой путь и brewv <formula_name> <wanted_version>. Для конкретного ОП это будет:

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

:)

Ответ 10

Обновленный ответ, так как это добавляет к тому, что @lance-pollard уже отправлен как рабочий ответ.

Как установить конкретную версию формулы (формула, используемая в этом примере, - terraform):

Ответ 11

Большинство других ответов уже устарели. К сожалению, у Homebrew до сих пор нет встроенного способа установки устаревшей версии, если только эта версия не существует в виде отдельной формулы (например, [email protected], [email protected]).

К счастью, для других формул существует гораздо более простой способ, чем запутанный беспорядок, который раньше был необходим. Вот полные инструкции:

  1. Ищите правильную версию в журналах:

    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›
    

    Это покажет список хэшей коммита. Возьмите тот, который подходит (в основном это должно быть довольно очевидно, и обычно это самый последний (то есть верхний).

  2. Найдите URL-адрес, по которому формула находится в исходном хранилище:

    brew info ‹formula› | grep ^From:
    
  3. Исправить URL:

    1. Замените github.com на raw.githubusercontent.com
    2. Замените blob/master на хеш коммита, который мы нашли в первом шаге.
  4. Установите нужную версию, заменив master в ранее найденном URL хешем коммита, например:

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

(Последний шаг может потребовать запуска brew unlink ‹formula› перед этим.)


Если вы скопировали хеш коммита, который хотите использовать, вы можете использовать что-то вроде этого примера, чтобы установить эту версию, заменив значение и bash хэшем коммита и желаемой формулой.

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

В этом примере устанавливается bash 4.4.23 вместо bash 5, хотя, если вы выполнили brew upgrade позже, bash 5 будет установлен поверх, если вы сначала не выполнили brew pin bash. Вместо этого, чтобы сделать это более плавным, без закрепления, вы должны сначала установить последнюю версию с brew install bash, затем brew unlink bash, затем установить старую версию, которую вы хотите, в соответствии с приведенным выше сценарием, а затем использовать brew switch bash 4.4.23 для настройки символических ссылок. на старую версию. Теперь brew upgrade не должно влиять на вашу версию Bash. Вы можете brew switch bash получить список доступных версий для переключения.


Альтернатива с использованием специального локального крана

Другим способом достижения этой же цели является:

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 [email protected]
# 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.

Это создает [email protected] в вашем пользовательском кране, которую вы можете установить в соответствии с приведенным выше примером. Недостатком является то, что вам, вероятно, все еще нужно brew unlink bash а затем brew link [email protected], чтобы использовать вашу конкретную версию Bash или любую другую формулу.

Ответ 12

В новейшей версии homebrew (0.9.5 на момент написания этой статьи) будет определен конкретный рецепт для версии боулинга Homebrew, который вы хотите установить. Пример:

$ brew search mongodb
mongodb    mongodb24  mongodb26

Тогда просто сделайте brew install mongodb26 как обычно.

В случае, если вы уже установили последнюю версию, обязательно отмените последнюю версию и свяжите нужную версию: brew unlink mongodb && brew link mongodb26.

Ответ 13

Проблема с homebrew/versions заключается в том, что у кого-то должна быть определенная версия программного обеспечения, перечисленная в репозитории, чтобы вы могли ее использовать. Кроме того, поскольку brew versions больше не поддерживается, требуется другое решение. Для решений, которые указывают использование brew switch, это будет работать, только если вы не сделали brew cleanup, так как версия должна существовать на вашем компьютере.

У меня возникла проблема с установкой более старой версии docker-machine, которая не указана в homebrew/versions. Я решил это, используя приведенное ниже, которое также должно работать для любого установленного программного обеспечения brew. В приведенном ниже примере будет использоваться docker-machine как пакет, который я хочу понизить с версии 0.5.0 до 0.4.1.

  • Перейдите в каталог homebrew Formula.
    Вы можете определить это, выполнив brew info [any package name]. Например, brew info docker-machine дает мне строку, которая показывает мне путь - /usr/local/Cellar/docker-machine/0.5.0. Это говорит мне, что на моей машине доморощенный установлен на /usr/local, а мой Formula каталог по умолчанию находится по адресу /usr/local/Library/Formula

  • Найдите конкретный файл формулы (.rb) для вашего пакета. Поскольку я хочу понизить docker-machine, я могу увидеть файл docker-machine.rb.

  • Получить историю версий для этого файла формулы. Введите git log docker-machine.rb. Здесь будет приведена полная история фиксации для этого файла. Вы увидите вывод следующим образом:

    ...more 

    commit 20c7abc13d2edd67c8c1d30c407bd5e31229cacc
    Author: BrewTestBot 
    Date:   Thu Nov 5 16:14:18 2015 +0000

        docker-machine: update 0.5.0 bottle.

    commit 8f615708184884e501bf5c16482c95eff6aea637
    Author: Vincent Lesierse 
    Date:   Tue Oct 27 22:25:30 2015 +0100

        docker-machine 0.5.0

        Updated docker-machine to 0.5.0

        Closes #45403.

        Signed-off-by: Dominyk Tiller 

    commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
    Author: BrewTestBot 
    Date:   Mon Sep 21 14:04:04 2015 +0100

        docker-machine: update 0.4.1 bottle.

    commit 18fcbd36d22fa0c19406d699308fafb44e4c8dcd
    Author: BrewTestBot 
    Date:   Sun Aug 16 09:05:56 2015 +0100

        docker-machine: update 0.4.1 bottle.

    ...more

Сложная часть - найти последнюю фиксацию для конкретной версии, которую вы хотите. В приведенном выше, я могу сказать, что последняя версия 0.4.1 была зафиксирована с этим тегом фиксации: commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423. Коммиты выше этой точки начинают использовать версию 0.5.0 (git записи журнала перечислены с последней по самую раннюю дату).

  1. Получить предыдущую версию файла формулы. Используя тэг фиксации с шага №3 (вы можете использовать первые 6 символов), вы можете получить более старую версию файла формулы, используя следующее:

    git checkout 5970e1 docker-machine.rb

  2. Удалите текущую версию пакета. Просто запустите обычные команды brew, чтобы удалить текущую версию вашего пакета.
    Ex. brew uninstall docker-machine

  3. Установить более старую версию пакета Теперь вы можете просто запустить обычную команду установки brew, и она установит формулу, которая у вас есть. Ex. brew install docker-machine

Возможно, вам понадобится повторно связать, используя brew link docker-machine, если это необходимо.

Если вы в любой момент хотите вернуться к последней версии определенного пакета, перейдите в каталог Формулы и выполните следующие команды в файле формулы (.rb)

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

Затем вы можете brew uninstall docker-machine и brew install docker-machine получить последнюю версию и сохранить ее таким образом в будущем.

Ответ 14

Установите старую версию пакета brew (пример Flyway 4.2.0)

Найдите свой локальный домашний git dir или локально клонируйте homebrew/homebrew-core

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

ИЛИ ЖЕ

git clone [email protected]:Homebrew/homebrew-core.git

Список всех доступных версий

git log master -- Formula/flyway.rb

Скопируйте идентификатор фиксации для нужной версии и установите его напрямую

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

Ответ 15

это может быть сделано очень легко для последней версии brew.

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)

Ответ 16

Если вы не можете найти свою версию с помощью brew search <formula>, вы также можете попробовать просмотреть журналы фиксации для своей формулы, чтобы найти нужную версию:

Вот пример установки более старой версии nginx через brew:

Оттуда мы можем установить 1.6.3 с URL-адресом sha и raw git:

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

Ответ 17

Ни один из них не работал на мой случай (Python), поэтому я добавлю 2 цента:

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

Результат выглядит следующим образом:

commit 9ff2d8ca791ed1bd149fb8be063db0ed6a67a6de
Author: Dominyk Tiller <[email protected]>
Date:   Thu Jun 30 17:42:18 2016 +0100

    python: clarify pour_bottle reason

commit cb3b29b824a264895434214e191d0d7ef4d51c85
Author: BrewTestBot <[email protected]>
Date:   Wed Jun 29 14:18:40 2016 +0100

    python: update 2.7.12 bottle.

commit 45bb1e220341894bbb7de6fd3f6df20987dc14f0
Author: Rakesh <[email protected]>
Date:   Wed Jun 29 10:02:26 2016 +0530

    python 2.7.12

    Closes #2452.

    Signed-off-by: Tim D. Smith <[email protected]>

commit cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
Author: BrewTestBot <[email protected]>
Date:   Fri Jun 17 20:14:36 2016 +0100

    python: update 2.7.11 bottle.

...

Я хочу версию 2.7.11, поэтому мой хэш cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9 (или cf5da05 для краткости). Затем я проверяю эту версию и устанавливаю формулу python:

git checkout cf5da05
brew install python

Наконец, очистите:

git checkout master

Ответ 18

Я попробовал большинство решений здесь, и они устарели. Я должен был объединить некоторые идеи отсюда с моей собственной работой. В результате я создал скрипт, который поможет мне выполнить тяжелую работу, которую вы можете найти здесь.

Использование:

brewv.sh formula_name desired_version

Ответ 19

В настоящее время старые способы установки определенных версий формул устарели. Таким образом, кажется, что мы должны использовать brew edit [formula]. Например, мы хотим установить версию 62.1 icu4c (необходима, например, для postgresql 10.5). Тогда вам придется

> brew edit icu4c
# drops you to editor

Здесь вам нужно изменить url, version и sha256 (возможно, также mirror) на соответствующие строки 62.1.

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"

затем запустите brew reinstall icu4c чтобы, наконец, загрузить версию 62.1.

Ответ 20

Официальный метод (судя по ответу на https://github.com/Homebrew/brew/issues/6028)

К сожалению, Homebrew до сих пор не имеет очевидного встроенного способа установки более старой версии.

К счастью, для большинства формул существует гораздо более простой способ, чем запутанный беспорядок, который раньше был необходим. Вот полные инструкции, использующие bash в качестве примера:

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 [email protected]
# 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.

Это создает [email protected] в вашем пользовательском кране, который вы можете установить в соответствии с приведенным выше примером. Важным примечанием является то, что вам, вероятно, нужно brew unlink bash если вы ранее установили стандартную/последнюю версию формулы, а затем brew link [email protected], чтобы использовать вашу конкретную версию Bash (или любую другую формулу, в которой вы установить последнюю и более старую версию).

Потенциальным недостатком этого метода является то, что вы не можете легко переключаться между версиями, потому что для brew это "другая формула".

Если вы хотите использовать brew switch $FORMULA $VERSION вы должны использовать следующий метод.


Скриптовый метод (рекомендуется)

Этот пример показывает, установка Старшего Баш 4.4.23, полезный пример, поскольку bash формула в настоящее время устанавливает Баш 5.

  • Сначала установите последнюю версию формулы с brew install bash
  • затем brew unlink bash
  • затем установите старую версию, которую вы хотите, согласно приведенным ниже фрагментам
  • наконец, используйте brew switch bash 4.4.23 чтобы установить символические brew switch bash 4.4.23 на вашу версию

Если вы выполнили brew upgrade после установки более старой версии без предварительной установки самой последней, тогда последняя будет установлена, что приведет к потере старой версии, если вы сначала не выполнили brew pin bash.

Шаги здесь ИЗБЕГАЮТ закрепления, потому что об этом легко забыть, и вы можете закрепить версию, которая в будущем станет небезопасной (см. Shellshock/etc). С этой настройкой brew upgrade не должно влиять на вашу версию Bash, и вы всегда можете запустить brew switch bash чтобы получить список доступных версий для переключения.

Скопируйте и вставьте и отредактируйте строки export из фрагмента кода ниже, чтобы обновить их с желаемой версией и именем формулы, затем скопируйте и вставьте остальные как есть, и они будут использовать эти переменные, чтобы творить чудеса.

# 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

Когда вы уверены, что версия существует в формуле, вы можете использовать следующее:

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

После того, как вы экспортировали хеш коммита, который хотите использовать, вы можете использовать его для установки этой версии пакета.

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

Следуйте инструкциям в выводе формулы, чтобы поместить его в переменную PATH или установить в качестве оболочки по умолчанию.

Ответ 21

Обновление по строке библиотеки /Formula/postgresql.rb 8 до

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

И MD5 в строке 9 до

fcc3daaf2292fa6bf1185ec45e512db6

Сохранить и выйти.

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

Теперь на этом этапе вы можете столкнуться с ошибкой postgresql could not create shared memory segment, чтобы обойти это обновление /etc/sysctl.conf следующим образом:

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

Попробуйте initdb /usr/local/var/postgres снова, и он должен работать плавно.

Запуск postgresql при запуске

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

Надеюсь, что помогает:)

Ответ 22

Я просто скопировал более старый выпуск elasticsearch в каталог /usr/local/Cellar/elasticsearch.

$ 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

Это. Может быть, это полезно для всех.

Ответ 23

Я решил, по моему мнению, создать формулу для Maven 3.1.1, которой homebrew/versions не было. Для этого:

  • Я разветкил homebrew/versions на github.
  • Я привязался от $(brew --prefix)/Library/Taps к локальной рабочей копии моей вилки. Я назову это my-homebrew/versions.
  • Я тестировал, указав формулу как my-homebrew/versions/<formula>.
  • Я отправил запрос на перенос homebrew/versions для моей новой формулы.

Yay.

Ответ 24

Для версий, которые в настоящее время не используются в формулах по умолчанию brew, вы можете легко создать свой собственный кран с помощью инструмента https://github.com/buildtools-version-taps/homebrew-versions-tap-tool