Wie installiere ich eine bestimmte Version einer Formel in Homebrew? Zum Beispiel postgresql-8.4.4 anstelle der neuesten Version 9.0.
Wie installiere ich eine bestimmte Version einer Formel in Homebrew? Zum Beispiel postgresql-8.4.4 anstelle der neuesten Version 9.0.
Antworten:
TLDR: brew install postgresql@8.4.4
Siehe Antwort unten für weitere Details.
* ( Ich habe meine Antwort überarbeitet, um einen gründlicheren Workflow für die Installation / Verwendung älterer Softwareversionen mit Homebrew zu ermöglichen. Sie können jederzeit eine Notiz hinzufügen, wenn Sie die alte Version besser gefunden haben. )
Beginnen wir mit dem einfachsten Fall:
Wenn Homebrew eine neue Formel installiert, wird sie in ein versioniertes Verzeichnis wie /usr/local/Cellar/postgresql/9.3.1
. Es werden dann nur symbolische Links zu diesem Ordner global installiert. Dies macht es im Prinzip ziemlich einfach, zwischen zwei installierten Versionen zu wechseln. (*)
Wenn Sie Homebrew schon länger verwenden und ältere Versionen nie entfernt haben (z. B. mit brew cleanup
), besteht die Möglichkeit, dass eine ältere Version Ihres Programms noch vorhanden ist. Wenn Sie diese vorherige Version einfach aktivieren möchten, brew switch
ist dies der einfachste Weg.
Überprüfen Sie mit brew info postgresql
(oder brew switch postgresql <TAB>
), ob die ältere Version installiert ist:
$ 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
Wir sehen, dass einige ältere Versionen bereits installiert sind. Wir können es aktivieren mit 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
Überprüfen wir noch einmal, was aktiviert ist:
$ 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
Beachten Sie, dass der Stern *
auf die neu aktivierte Version verschoben wurde
(*) Bitte beachten Sie, dass dies brew switch
nur funktioniert, solange alle Abhängigkeiten der älteren Version bestehen. In einigen Fällen kann eine Neuerstellung der älteren Version erforderlich werden. Daher ist die Verwendung brew switch
meistens nützlich, wenn zwischen zwei Versionen gewechselt werden soll, die nicht zu weit voneinander entfernt sind.
Insbesondere bei größeren Softwareprojekten besteht sehr wahrscheinlich eine ausreichend hohe Nachfrage nach mehreren (möglicherweise API-inkompatiblen) Hauptversionen einer bestimmten Software. Ab März 2012 bietet Homebrew 0.9 einen Mechanismus dafür: brew tap
& das Repository für Homebrew-Versionen .
Dieses Versions-Repository kann Backports älterer Versionen für mehrere Formeln enthalten. (Meistens nur die großen und berühmten, aber natürlich haben sie auch mehrere Formeln für postgresql.)
brew search postgresql
zeigt Ihnen, wo Sie suchen müssen:
$ brew search postgresql
postgresql
homebrew/versions/postgresql8 homebrew/versions/postgresql91
homebrew/versions/postgresql9 homebrew/versions/postgresql92
Wir können es einfach durch Eingabe installieren
$ 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
# …
Beachten Sie, dass dies automatisch auf den homebrew/versions
Wasserhahn getippt hat. (Überprüfen Sie mit brew tap
, entfernen Sie mit brew untap homebrew/versions
.) Folgendes wäre gleichwertig gewesen:
$ brew tap homebrew/versions
$ brew install postgresql8
Solange die Formeln der zurückportierten Version auf dem neuesten Stand sind, ist dieser Ansatz wahrscheinlich der beste Weg, um mit älterer Software umzugehen.
Die folgenden Ansätze sind hauptsächlich der Vollständigkeit halber aufgeführt. Beide versuchen, eine untote Formel aus dem Aufbewahrungsort wiederzubeleben. Aufgrund geänderter Abhängigkeiten, API-Änderungen in der Formelspezifikation oder einfach einer Änderung der Download-URL können Dinge funktionieren oder nicht.
Da das gesamte Formelverzeichnis ein Git-Repository ist, können bestimmte Versionen mit einfachen Git-Befehlen installiert werden. Wir müssen jedoch einen Weg finden, um zu einem Commit zu gelangen, bei dem die alte Version verfügbar war.
a) historische Zeiten
Zwischen August 2011 und Oktober 2014 hatte Homebrew einen brew versions
Befehl, der alle verfügbaren Versionen mit ihren jeweiligen SHA-Hashes ausspuckte. Ab Oktober 2014 müssen Sie eine ausführen, brew tap homebrew/boneyard
bevor Sie sie verwenden können. Wie der Name des Wasserhahns andeutet, sollten Sie dies wahrscheinlich nur als letzten Ausweg tun.
Z.B
$ 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
Wie Sie sehen können, rät es davon ab, es zu verwenden. Homebrew spuckt alle Versionen aus, die es mit seiner internen Heuristik finden kann, und zeigt Ihnen, wie Sie die alten Formeln abrufen können. Lass es uns versuchen.
# 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
Nachdem die ältere postgresql-Version installiert ist, können wir die neueste Formel erneut installieren, um unser Repository sauber zu halten:
$ git checkout -- Library/Formula/postgresql.rb
brew switch
ist dein Freund, um zwischen dem Alten und dem Neuen zu wechseln.
b) prähistorische Zeiten
Für besondere Bedürfnisse können wir auch versuchen, das Homebrew-Repo selbst zu durchforsten.
$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
git log -S
Sucht nach allen Commits, bei denen die Zeichenfolge '8.4.4'
in der Datei hinzugefügt oder entfernt wurde Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb
. Als Ergebnis erhalten wir zwei Commits.
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
Offensichtlich fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
ist das Commit, an dem wir interessiert sind. Da dieses Commit ziemlich alt ist, werden wir versuchen, die gesamte Homebrew-Installation herunterzustufen (auf diese Weise ist die Formel-API mehr oder weniger garantiert gültig):
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
Sie können den letzten Befehl überspringen, um die Referenz in Ihrem Git-Repository zu behalten.
Ein Hinweis: Beim Auschecken des älteren Commits führen Sie ein vorübergehendes Downgrade Ihrer Homebrew-Installation durch. Sie sollten also vorsichtig sein, da einige Befehle in Homebrew möglicherweise von der neuesten Version abweichen.
Es ist nicht zu schwer und Sie können es dann in Ihr eigenes Repository hochladen. Früher waren es Homebrew-Versionen , aber das wird jetzt eingestellt.
Wenn Sie eine bestimmte Version von, sagen wir postgresql halten wollen, um und verhindern , dass es aktualisiert wird , wenn Sie die natürliche tun brew update; brew upgrade
Prozedur können Sie Stift eine Formel:
$ brew pin postgresql
Fixierte Formeln werden in aufgelistet. /usr/local/Library/PinnedKegs/
Sobald Sie die neuesten Änderungen und Aktualisierungen vornehmen möchten, können Sie sie wieder entfernen :
$ brew unpin postgresql
git checkout fa992 -- Library/Formula/postgresql.rb
. Wenn Sie fertig sind, können Sie die Änderungen an der Formel mit rückgängig machen git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb
.
brew update
das Git-Repo einrichten.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
, dann können Sie git checkout 4cce79d -- Formula/go.rb
und verwenden HOMEBREW_NO_AUTO_UPDATE=1 brew install go
.
Nachdem Homebrew / Versionen veraltet sind, unterstützt Homebrew / Core mehrere Versionen von Formeln mit einem neuen Namensformat.
Um eine bestimmte Version zu installieren, z. B. postgresql 9.5, führen Sie einfach Folgendes aus:
$ brew install postgresql@9.5
Um die verfügbaren Versionen aufzulisten, führen Sie eine Suche mit @ durch:
$ 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
. Ich cd
gehe stattdessen einfach in das Verzeichnis (ohne FORMULANAME.rb) und mache dann dengit checkout 120938
cd /usr/local
zuerst.
brew unlink FORMULANAME
brew versions <formula>
wird nicht mehr unterstützt.
brew link --force postgresql@9.5
. Wenn Sie bereits eine neuere Version installiert haben und möchten, dass die ältere Version Ihre Standardversion ist, benötigen Sie --overwrite
dort auch eine.
Es gibt jetzt eine viel einfachere Möglichkeit, eine ältere Version einer Formel zu installieren, die Sie zuvor installiert hatten. Einfach benutzen
brew switch [formula] [version]
Zum Beispiel wechsle ich regelmäßig zwischen Node.js 0.4.12 und 0.6.5:
brew switch node 0.4.12
brew switch node 0.6.5
Da brew switch
nur die Symlinks geändert werden, ist es sehr schnell. Weitere Dokumentation im Homebrew-Wiki finden Sie unter Externe Befehle .
Update: 15.01.2015
brew install <url>
(muss vielleicht brew unlink
zuerst, zB brew unlink docker
)brew switch docker 1.3.3
brew switch docker 1.4.1
Aus diesem Kern
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>
. Andernfalls ist dies (bisher) die einfachste und prägnanteste Möglichkeit, zu einer bestimmten Version einer Formel zu wechseln.
Raw
drücken die Taste auf welcher Datei?!
brew log <formula>
In Anlehnung an den Vorschlag von @ halfcube funktioniert dies wirklich gut:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
package@version
git log master -- Formula/PACKAGENAME.rb
ausführen : Verwenden Sie diese Option , um den Commit-Verlauf abzurufen, das richtige Commit zu überprüfen und dann auszuführen brew install Formula/PACKAGENAME.rb
, um es zu installieren.
brew unlink
vorher eine brew install
andere Version.
mxcl
?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb
, bekomme aber den Fehler, wahrscheinlich aufgrund des @
Zeichens: 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.
Irgendwelche Ideen?
Ich habe eine bessere alternative Lösung als die anderen komplexen Lösungen gefunden.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
Dadurch wird PostgreSQL 8.4.8 heruntergeladen und installiert
Ich habe diese Lösung gefunden, indem ich die Schritte zum Durchsuchen des Repos und einen Kommentar im Repo befolgt habe.
Nach ein wenig Recherche fand jemand eine Sammlung seltener Formulare zum Brauen.
Wenn Sie nach MySQL 5.1.x suchen, probieren Sie es aus.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb
schien mit Syntaxfehlern zu scheitern.
raw
in der URL
homebrew-versions
ist weg und alles läuft core
jetzt, also ist der allgemeine Fall : brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb
. COMMIT
finden Sie unter github.com/Homebrew/homebrew-core/commits/master/Formula/… .
Sie können die Strategie verwenden, die Formel und ein bestimmtes Commit im Verlauf der Formel zu identifizieren, das der Version des Pakets entspricht, das Sie installieren möchten.
Gehen Sie zu https://github.com/Homebrew/homebrew-core
Drücken Sie t
auf Ihrer Tastatur, um den Dateisucher zu aktivieren.
Identifizieren Sie eine Formel, die vielleicht am relevantesten aussieht: Formula/mysql.rb
und bringen Sie zu einem Forumla-Dateispeicherort: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb .
Sehen Sie sich den Versionsverlauf an History
, indem Sie auf die Schaltfläche unter klicken https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb . Wenn Sie an MySQL 5.7.10 interessiert sind, möchten Sie möglicherweise auf die neueste Version vor 5.7.11 klicken, um zu einem GitHub-Commit zu navigieren:
HINWEIS: Möglicherweise müssen Sie den Festschreibungsverlauf in Ihrer Konsole gemäß dem Vorschlag von GitHub anzeigen, wenn der Festschreibungsverlauf nicht in Ihren Browser geladen wird. Ersetzen Sie den Commit-SHA oben in der URL, wenn Sie diesen Commit auf GitHub sehen möchten. Fahren Sie alternativ mit Schritt 7 fort.
Klicken Sie auf die Schaltfläche "Anzeigen", um die Quelle für die Datei mysql.rb anzuzeigen, nachdem das Commit angewendet wurde.
Klicken Sie dann auf die Schaltfläche "Raw", um die Raw-Quelle anzuzeigen.
Kopieren Sie die URL. Alternativ können Sie die URL selbst mit dem erstellenmysql.rb
Dateinamen erstellen, um Ihre Formel und die bestimmte Version dieser Formel zu identifizieren (identifiziert durch die Commmit-SHA in der unten stehenden URL).
Installieren Sie es mit $ brew install [URL from step 7]
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
HINWEIS: Diese Antwort wurde aktualisiert, um das Entfernen der Website braumeister.org zu berücksichtigen. Das gleiche Prinzip gilt, Braumeister hatte lediglich eine anfängerfreundliche Möglichkeit zum Navigieren in Formelversionen bereitgestellt.
Die meisten anderen Antworten sind mittlerweile veraltet. Leider noch Homebrew keine eingebaute Möglichkeit , eine veraltete Version der Installation haben, es sei denn , diese Version als separate Formel besteht (zB python@2
, postgresql@9.4
...).
Glücklicherweise gibt es für andere Formeln einen viel einfacheren Weg als das gewundene Durcheinander, das früher notwendig war. Hier sind die vollständigen Anweisungen:
Suchen Sie in den Protokollen nach der richtigen Version:
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›
Dies zeigt eine Liste von Commit-Hashes. Nehmen Sie eine, die angemessen ist (meistens sollte es ziemlich offensichtlich sein, und normalerweise ist es die neueste (dh die beste).
Suchen Sie die URL, unter der sich die Formel im Upstream-Repository befindet:
brew info ‹formula› | grep ^From:
Korrigieren Sie die URL:
github.com
durchraw.githubusercontent.com
blob/master
durch den Commit-Hash, den wir im ersten Schritt gefunden haben.Installieren Sie die gewünschte Version, indem Sie master
die zuvor gefundene URL durch den Commit-Hash ersetzen , z.
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
(Der letzte Schritt muss möglicherweise brew unlink ‹formula›
vorher ausgeführt werden.)
Wenn Sie einen Commit-Hash kopiert haben, den Sie verwenden möchten, können Sie diese Version mithilfe dieses Beispiels installieren, indem Sie den Wert bash
durch Ihren Commit-Hash und Ihre gewünschte Formel ersetzen .
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
In diesem Beispiel wird Bash 4.4.23 anstelle von Bash 5 installiert. Wenn Sie jedoch brew upgrade
danach Bash 5 ausführen, wird Bash 5 oben installiert, sofern Sie es nicht zuerst ausgeführt haben brew pin bash
. Statt diesen glatten OHNE Pinning, sollten Sie zunächst die neueste mit installieren brew install bash
, dann brew unlink bash
, dann installieren Sie die ältere Version , die Sie per Skript oben wollen, und dann verwenden , brew switch bash 4.4.23
um die ältere Version die symbolischen Links einzurichten. Jetzt brew upgrade
sollte a Ihre Version von Bash nicht beeinflussen. Sie können brew switch bash
eine Liste der verfügbaren Versionen abrufen, zu denen Sie wechseln können.
Ein anderer Weg, um das gleiche Ziel zu erreichen, scheint zu sein:
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.
Dadurch wird formula@version
in Ihrem benutzerdefinierten Tap ein Tipp erstellt, den Sie gemäß dem obigen Beispiel installieren können. Der Nachteil ist, dass Sie wahrscheinlich noch brew unlink bash
und dann benötigen, brew link bash@4.4.23
um Ihre spezifische Version von Bash oder eine andere Formel zu verwenden.
brew log
sodass zusätzliche -F
oder --grep
Optionen für mich fehlgeschlagen sind.
brew log
. Ich kann mir jetzt nicht die Mühe machen, eine neue Version zu schreiben, da dazu die Git-Protokollnachricht ordnungsgemäß analysiert oder alternativ git log
direkt im entsprechenden Repository ausgeführt werden muss. Und das Changelog scheint diese bahnbrechende Änderung nicht einmal zu erwähnen. Mehr als nervig.
External Command
es erforderlich zu sein, innerhalb der Struktur von brew
zu arbeiten, um diese Art der git log
Filterung zurückzubekommen. docs.brew.sh/External-Commands
brew extract
Verwendung finden konnte, danke!
Ich habe gerade Homebrew verwendet, um zu Maven 2.2.1 zurückzukehren, seit der einfach brew install maven
installierten Maven 3.0.3.
Zuerst muss man das Maven-Verzeichnis dort also lassen
$ Brew Unlink Maven
Verwenden Sie den Befehl Brew Tap
$ Brew Tap Homebrew / Versionen Klonen in '/ usr / local / Library / Taps / homebrew-Versionen' ... remote: Objekte zählen: 590, fertig. remote: Objekte komprimieren: 100% (265/265), fertig. Remote: Insgesamt 590 (Delta 362), wiederverwendet 549 (Delta 325) Empfangen von Objekten: 100% (590/590), 117,49 KiB | 79 KiB / s, fertig. Auflösen von Deltas: 100% (362/362), erledigt. 50 Formel abgegriffen
Jetzt können Sie die Formel maven2 installieren:
$ Brew install maven2 ==> Herunterladen von 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 Dateien, 3,1 MB, erstellt in 6 Sekunden
$ mvn --version Apache Maven 2.2.1 (r801777; 2009-08-06 12: 16: 01-0700) Java-Version: 1.6.0_37 Java-Startseite: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Standardgebietsschema: en_US, Plattformcodierung: MacRoman Betriebssystemname: "mac os x" Version: "10.7.4" arch: "x86_64" Familie: "mac"
Bearbeiten:
Sie können auch einfach brew switch maven 2.2.1
zu einer anderen Version wechseln.
Bearbeiten: Das Apache Maven-Projekt hat das Repo neu organisiert. Diese Antwort wurde aktualisiert, um diese Änderung zu berücksichtigen.
Basierend auf dem von @tschundeee und @ Debilskis Update 1 beschriebenen Workflow habe ich die Prozedur automatisiert und in diesem Skript eine Bereinigung hinzugefügt .
Laden Sie es herunter , legen Sie es in Ihren Weg und brewv <formula_name> <wanted_version>
. Für das spezifische OP wäre es:
cd path/to/downloaded/script/
./brewv postgresql 8.4.4
:) :)
Eine aktualisierte Antwort seitdem ergänzt das, was @ lance-pollard bereits als funktionierende Antwort gepostet hat.
So installieren Sie eine bestimmte Version einer Formel (in diesem Beispiel verwendete Formel lautet terraform
):
git log master -- Formula/terraform.rb
wenn Sie das Repo lokal geklont haben.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
Leider hat Homebrew immer noch keine offensichtliche Möglichkeit, eine ältere Version zu installieren.
Glücklicherweise gibt es für die meisten Formeln einen viel einfacheren Weg als das gewundene Durcheinander, das früher notwendig war. Hier sind die vollständigen Anweisungen am bash
Beispiel:
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.
Dadurch wird der formula@version
in Ihrem benutzerdefinierten Tap angegebene Wert erstellt, den Sie gemäß dem obigen Beispiel installieren können. Ein wichtiger Hinweis ist, dass Sie dies wahrscheinlich tun müssen, brew unlink bash
wenn Sie zuvor die Standard- / neueste Version der Formel installiert haben, und dann brew link bash@4.4.23
, um Ihre spezifische Version von Bash (oder eine andere Formel, in der Sie die neueste und eine ältere Version installiert haben) zu verwenden.
Ein möglicher Nachteil dieser Methode ist, dass Sie nicht einfach zwischen den Versionen wechseln können, da brew
es sich um eine "andere Formel" handelt.
Wenn Sie verwenden möchten, sollten brew switch $FORMULA $VERSION
Sie die nächste Methode verwenden.
Dieses Beispiel zeigt die Installation der älteren Bash 4.4.23, ein nützliches Beispiel, da die bash
Formel derzeit Bash 5 installiert.
brew install bash
brew unlink bash
brew switch bash 4.4.23
, um die Symlinks zu Ihrer Version einzurichtenWenn Sie brew upgrade
nach der Installation einer älteren Version eine Version ausführen, ohne zuerst die neueste Version zu installieren, wird die neueste Version installiert, die Ihre ältere Version blockiert, es sei denn, Sie haben sie zuerst ausgeführt brew pin bash
.
Die Schritte hier vermeiden das Fixieren, da es leicht zu vergessen ist und Sie möglicherweise eine Version anheften, die in Zukunft unsicher wird (siehe Shellshock / etc). Mit diesem Setup brew upgrade
sollte sich a nicht auf Ihre Version von Bash auswirken, und Sie können jederzeit brew switch bash
eine Liste der verfügbaren Versionen abrufen, zu denen Sie wechseln können.
Kopieren Sie die export
Zeilen aus dem folgenden Codeausschnitt, fügen Sie sie ein und bearbeiten Sie sie , um sie mit der gewünschten Version und dem gewünschten Formelnamen zu aktualisieren. Kopieren Sie dann den Rest wie er ist und fügen Sie ihn ein. Diese Variablen werden verwendet, um die Magie auszuführen.
# 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
Wenn Sie sicher sind, dass die Version in der Formel vorhanden ist, können Sie Folgendes verwenden:
# 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}')
Nachdem Sie den Commit-Hash exportiert haben, den Sie verwenden möchten, können Sie damit die Version des Pakets installieren.
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
Befolgen Sie die Anweisungen in der Formelausgabe, um sie in Ihren PATH einzufügen, oder legen Sie sie als Standard-Shell fest.
Auf der neuesten Version von Homebrew (0.9.5 zum Zeitpunkt dieses Schreibens) gibt es ein spezielles Rezept für die Version des Homebrew-Fasses, das Sie installieren möchten. Beispiel:
$ brew search mongodb
mongodb mongodb24 mongodb26
Dann mach es einfach brew install mongodb26
wie normal.
Wenn Sie bereits die neueste Version installiert haben, müssen Sie die Verknüpfung der neuesten Version aufheben und die gewünschte Version verknüpfen : brew unlink mongodb && brew link mongodb26
.
Das Problem dabei homebrew/versions
ist, dass jemand diese bestimmte Version der Software im Repository haben muss, damit Sie sie verwenden können. Da dies brew versions
nicht mehr unterstützt wird, ist eine andere Lösung erforderlich. Bei Lösungen, die auf die Verwendung hinweisen brew switch
, funktioniert dies nur, wenn Sie dies nicht getan haben, brew cleanup
da die Version auf Ihrem Computer vorhanden sein muss.
Ich hatte ein Problem mit dem Wunsch, eine bestimmte ältere Version zu installieren, docker-machine
die nicht in aufgeführt ist homebrew/versions
. Ich habe dies mit dem folgenden Problem gelöst, das auch für jede von Brew installierte Software funktionieren sollte. Das folgende Beispiel wird docker-machine
als Paket verwendet, das ich von Version 0.5.0 auf 0.4.1 downgraden möchte.
Gehen Sie zu Ihrem Homebrew- Formula
Verzeichnis.
Sie können dies durch Ausführen feststellen brew info [any package name]
. Zum Beispiel brew info docker-machine
gibt mir eine Linie, die mir einen Weg zeigt - /usr/local/Cellar/docker-machine/0.5.0
. Dies sagt mir, dass auf meinem Computer Homebrew unter installiert ist /usr/local
und sich mein Formula
Verzeichnis standardmäßig unter befindet/usr/local/Library/Formula
Suchen Sie die spezifische Formeldatei (.rb) für Ihr Paket.
Da ich ein Downgrade durchführen möchte docker-machine
, kann ich eine docker-machine.rb
Datei sehen.
Rufen Sie den Versionsverlauf für diese Formeldatei ab . Geben Sie ein git log docker-machine.rb
. Dadurch wird der vollständige Festschreibungsverlauf für diese Datei aufgelistet. Sie sehen die Ausgabe wie folgt:
...Mehr Commit 20c7abc13d2edd67c8c1d30c407bd5e31229cacc Autor: BrewTestBot Datum: Do 5. November 16:14:18 2015 +0000 Docker-Maschine: 0.5.0 Flasche aktualisieren. Commit 8f615708184884e501bf5c16482c95eff6aea637 Verfasser: Vincent Lesierse Datum: Di 27.10. 22:25:30 2015 +0100 Docker-Maschine 0.5.0 Docker-Maschine auf 0.5.0 aktualisiert Schließt # 45403. Unterzeichnet von: Dominyk Tiller Commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423 Autor: BrewTestBot Datum: Montag, 21. September, 14:04:04 Uhr 2015 +0100 Docker-Maschine: Update 0.4.1 Flasche. Commit 18fcbd36d22fa0c19406d699308fafb44e4c8dcd Autor: BrewTestBot Datum: So 16. August 09:05:56 2015 +0100 Docker-Maschine: Update 0.4.1 Flasche. ...Mehr
Der schwierige Teil besteht darin, das neueste Commit für die gewünschte Version zu finden. Oben kann ich feststellen, dass die neueste Version 0.4.1 mit diesem Commit-Tag festgeschrieben wurde : commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
. Die Commits über diesem Punkt beginnen mit der Version 0.5.0 (Git-Protokolleinträge werden vom spätesten bis zum frühesten Datum aufgelistet).
Holen Sie sich eine frühere Version der Formeldatei. Mit dem Commit-Tag aus Schritt 3 (Sie können die ersten 6 Zeichen verwenden) können Sie eine ältere Version der Formeldatei wie folgt abrufen:
git checkout 5970e1 docker-machine.rb
Deinstallieren Sie Ihre aktuelle Paketversion.
Führen Sie einfach die normalen Brew-Befehle aus, um die aktuelle Version Ihres Pakets zu deinstallieren.
Ex.brew uninstall docker-machine
Installieren der älteren Paketversion
Jetzt können Sie einfach den normalen Befehl zum Installieren von Brew ausführen und die Formel installieren, die Sie ausgecheckt haben. Ex.brew install docker-machine
Möglicherweise müssen Sie bei Bedarf eine erneute Verknüpfung verwenden brew link docker-machine
.
Wenn Sie zu irgendeinem Zeitpunkt auf die neueste Version eines bestimmten Pakets zurückgreifen möchten, gehen Sie in das Formelverzeichnis und geben Sie die folgenden Befehle in Ihrer Formeldatei (.rb) ein.
git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
Dann können brew uninstall docker-machine
und können brew install docker-machine
Sie die neueste Version erhalten und diese auch in Zukunft beibehalten.
git log --grep 0.4.1 docker-machine.rb
.
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
cairo
diese Weise konnte ich nicht genug Versionsgeschichte für das Gebräu finden. Die Antwort von @ sealocal zeigte aus irgendeinem Grund mehr.
Meine Situation: postgresql
wurde versehentlich von 11 auf 12 aktualisiert. Ich möchte 11 behalten.
brew services stop postgresql
brew install postgresql@11
brew link postgresql@11 --force
postgres
in postgres@11
:cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11
brew services start postgresql@11
Wenn Sie Fehler haben, überprüfen Sie /usr/local/var/log/postgresql@11.log
(beachten Sie die @ 11).
brew postgresql-upgrade-database
). Diese Antwort ist für fast jede andere Formel nicht nützlich.
brew postgresql-upgrade-database
ist gut für Upgrades . Meine Antwort bezieht sich auf die Verwendung einer älteren Postgres-Version. Das einfache Wechseln der Binärdateien funktioniert nicht.
nvm
FYI Ich hatte Glück, diese Technik für ältere LTS-Versionen zu verwenden. Zumindest zum Zeitpunkt des Schreibens sollten v10 und v12 verfügbar sein, z. B. brew install node@12
formulae.brew.sh/formula/node
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/
ODER
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
aus dem homebrew-core
Verzeichnis laufen ? es funktionierte für mich ohne raw.github..
Adresse
Ich habe die meisten Lösungen hier ausprobiert und sie sind veraltet. Ich musste einige Ideen von hier mit meiner eigenen Arbeit kombinieren. Als Ergebnis habe ich ein Skript erstellt, das mir hilft, das schwere Heben zu erledigen, das Sie finden können hier
Verwendungszweck:
brewv.sh formula_name desired_version
Es könnte sehr einfach für die letzte Version von Brew gemacht werden.
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)
Keines davon hat wirklich für meinen Fall (Python) funktioniert, also werde ich meine 2 Cent hinzufügen:
cd `brew --prefix`
git log Library/Formula/python.rb
Die Ausgabe sieht folgendermaßen aus:
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. ...
Ich möchte eine Version, 2.7.11
also ist mein Hash cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
(oder cf5da05
kurz). Als nächstes überprüfe ich diese Version und installiere die Formel python
:
git checkout cf5da05
brew install python
Zum Schluss aufräumen:
git checkout master
HOMEBREW_NO_AUTO_UPDATE
und lesen Sie github.com/Homebrew/brew/issues/1188
cd
Brew/Homebrew
git log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Taps
es ignoriert wird.
HOMEBREW_NO_AUTO_UPDATE
. Ja, vergessen Sie nicht über das , was Sie brauchen , bis nach dem Sie entdecken Sie es brauchen. xD
HOMEBREW_NO_INSTALL_CLEANUP
Ist das nicht etwas, an das du dich erinnern musst?
Wenn Sie Ihre Version mit nicht finden können brew search <formula>
, können Sie auch versuchen, die Festschreibungsprotokolle für Ihre Formel zu durchsuchen, um die gewünschte Version zu finden:
Hier ist ein Beispiel für die Installation einer älteren Version von Nginx über Brew:
sehen nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
Von dort aus können wir 1.6.3
mit der sha und raw git URL installieren :
brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
Derzeit sind die alten Methoden zur Installation bestimmter Formelversionen veraltet. Es scheint also, als müssten wir verwenden brew edit [formula]
. Angenommen, wir möchten eine 62.1
Version von installieren icu4c
(z postgresql 10.5
. B. für ). Dann müsstest du
> brew edit icu4c
# drops you to editor
Hier würden Sie das ändern haben url
, version
und sha256
(vielleicht auch mirror
) an den entsprechenden 62.1
Saiten.
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"
Führen Sie dann aus brew reinstall icu4c
, um die 62.1
Version endgültig herunterzuladen .
sha256
? in meinem Fallhttps://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip
Update in der Zeile 8 Library / Formula / postgresql.rb auf
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2
Und MD5 in Zeile 9 bis
fcc3daaf2292fa6bf1185ec45e512db6
Speichern und schließen.
brew install postgres
initdb /usr/local/var/postgres
In dieser Phase könnte der postgresql could not create shared memory segment
Fehler auftreten, um dieses Update /etc/sysctl.conf
wie folgt zu umgehen:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Versuchen initdb /usr/local/var/postgres
erneut, und es sollte reibungslos funktionieren.
Postgresql beim Start ausführen
launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist
Ich hoffe, das hilft :)
Ich habe gerade eine ältere Version von elasticsearch in das /usr/local/Cellar/elasticsearch
Verzeichnis kopiert .
$ 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
Das ist es. Vielleicht ist es für jeden nützlich.
Ich entschied mich gegen mein besseres Urteilsvermögen, eine Formel für Maven 3.1.1 zu erstellen, die homebrew/versions
es nicht gab. Um dies zu tun:
homebrew/versions
auf Github.$(brew --prefix)/Library/Taps
mit der lokalen Arbeitskopie meiner Gabel hergestellt. Ich werde das nennen my-homebrew/versions
.my-homebrew/versions/<formula>
.homebrew/versions
für meine neue Formel gesendet .Yay.
Für Versionen, die derzeit nicht in den Standardbrühformeln enthalten sind, können Sie mit dem Tool unter https://github.com/buildtools-version-taps/homebrew-versions-tap-tool ganz einfach Ihren eigenen Tipp erstellen
brew tap-new user/repo
und dann brew extract --version='Major.minor' FORMULA user/repo
und dann brew install FORMULA@Major.minor
.
Ich habe ein Tool erstellt , um den in dieser Antwort beschriebenen Prozess zu vereinfachen .
Führen Sie Folgendes aus, um ein Paket pkg
mit Version zu finden a.b.c
:
$ brew-install-specific pkg@a.b.c
Dadurch werden Commits in der pkg
Homebrew-Formel aufgelistet, die die angegebene Version zusammen mit ihren GitHub-URLs erwähnen.
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:
Überprüfen Sie das Commit anhand der angegebenen URL und geben Sie den Index des ausgewählten Commits ein.
Select index: 2
Run:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb
Kopieren Sie den angegebenen zu installierenden Befehl und führen Sie ihn aus.
postgresql
ist seltsam, weil es zu einem bestimmten Zeitpunkt separate Versionen in Homebrew gab. So etwasbash
könnte ein besseres Beispiel sein, da es innerhalb desselben Formelnamens von 4.x auf 5.x ging. Siehe stackoverflow.com/a/55764594/3794873