Come installo una versione specifica di una formula in homebrew? Ad esempio, postgresql-8.4.4 invece dell'ultimo 9.0.
Come installo una versione specifica di una formula in homebrew? Ad esempio, postgresql-8.4.4 invece dell'ultimo 9.0.
Risposte:
TLDR: brew install postgresql@8.4.4 vedi la risposta sotto per maggiori dettagli.
* ( Ho modificato nuovamente la mia risposta per fornire un flusso di lavoro più approfondito per l'installazione / l'utilizzo di versioni software precedenti con homebrew. Sentiti libero di aggiungere una nota se hai trovato la versione precedente migliore. )
Cominciamo con il caso più semplice:
Quando homebrew installa una nuova formula, la inserisce in una directory con versione come /usr/local/Cellar/postgresql/9.3.1. Solo i collegamenti simbolici a questa cartella vengono quindi installati a livello globale. In linea di principio, ciò semplifica il passaggio tra due versioni installate. (*)
Se stai usando homebrew da più tempo e non hai mai rimosso versioni precedenti (usando, ad esempio brew cleanup), è probabile che alcune versioni precedenti del tuo programma possano essere ancora in circolazione. Se vuoi semplicemente attivare quella versione precedente, brew switchè il modo più semplice per farlo.
Verificare con brew info postgresql(o brew switch postgresql <TAB>) se è installata la versione precedente:
$ 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
Vediamo che alcune versioni precedenti sono già installate. Potremmo attivarlo utilizzando 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
Ricontrolliamo cosa è attivato:
$ 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
Nota che la stella *è passata alla versione appena attivata
(*) Nota che brew switchfunziona solo finché tutte le dipendenze della versione precedente sono ancora in circolazione. In alcuni casi, potrebbe essere necessario ricostruire la versione precedente. Pertanto, l'utilizzo brew switchè utile soprattutto quando si desidera passare da una versione all'altra non troppo distanti.
Soprattutto per progetti software più grandi, è molto probabile che vi sia una richiesta abbastanza elevata per diverse versioni principali (potenzialmente incompatibili con le API) di un determinato software. A partire da marzo 2012, Homebrew 0.9 fornisce un meccanismo per questo: brew tap& il repository di versioni homebrew .
Il repository di versioni può includere backport di versioni precedenti per diverse formule. (Principalmente solo quelli grandi e famosi, ma ovviamente avranno anche diverse formule per postgresql.)
brew search postgresql ti mostrerà dove cercare:
$ brew search postgresql
postgresql
homebrew/versions/postgresql8 homebrew/versions/postgresql91
homebrew/versions/postgresql9 homebrew/versions/postgresql92
Possiamo semplicemente installarlo digitando
$ 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
# …
Si noti che questo ha automaticamente toccato il homebrew/versionsrubinetto. (Verificare con brew tap, rimuovere con brew untap homebrew/versions.) Quanto segue sarebbe stato equivalente:
$ brew tap homebrew/versions
$ brew install postgresql8
Fintanto che le formule della versione backport rimarranno aggiornate, questo approccio è probabilmente il modo migliore per gestire software meno recenti.
I seguenti approcci sono elencati principalmente per completezza. Entrambi provano a resuscitare una formula di non morti dal repository della birra. A causa delle dipendenze modificate, delle modifiche dell'API nelle specifiche della formula o semplicemente di una modifica nell'URL di download, le cose potrebbero non funzionare.
Poiché l'intera directory della formula è un repository git, è possibile installare versioni specifiche usando semplici comandi git. Tuttavia, dobbiamo trovare un modo per arrivare a un commit in cui era disponibile la versione precedente.
a) tempi storici
Tra agosto 2011 e ottobre 2014 , l'homebrew ha ricevuto un brew versionscomando, che ha sputato fuori tutte le versioni disponibili con i rispettivi hash SHA. A partire da ottobre 2014, devi farlo brew tap homebrew/boneyardprima di poterlo utilizzare. Come suggerisce il nome del rubinetto, probabilmente dovresti farlo solo come ultima risorsa.
Per esempio
$ 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
Come puoi vedere, sconsiglia di usarlo. Homebrew sputa tutte le versioni che può trovare con la sua euristica interna e ti mostra un modo per recuperare le vecchie formule. Proviamolo.
# 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
Ora che è installata la versione postgresql precedente, possiamo reinstallare la formula più recente per mantenere pulito il nostro repository:
$ git checkout -- Library/Formula/postgresql.rb
brew switch è il tuo amico a cambiare tra il vecchio e il nuovo.
b) preistoria
Per esigenze speciali, possiamo anche provare a scavare nel repository homebrew.
$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
git log -Scerca tutti i commit in cui la stringa è '8.4.4'stata aggiunta o rimossa nel file Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb. Di conseguenza otteniamo due commit.
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
Ovviamente, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422è il commit a cui siamo interessati. Poiché questo commit è piuttosto vecchio, proveremo a eseguire il downgrade dell'installazione homebrew completa (in questo modo, l'API della formula è più o meno garantita per essere valida):
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
È possibile saltare l'ultimo comando per mantenere il riferimento nel proprio repository git.
Una nota: quando si verifica il commit precedente, si esegue il downgrade temporaneo dell'installazione homebrew. Quindi, dovresti stare attento poiché alcuni comandi in homebrew potrebbero essere diversi dalla versione più recente.
Non è troppo difficile e puoi quindi caricarlo sul tuo repository. Una volta erano versioni Homebrew , ma ora è fuori produzione.
Se vuoi mantenere una certa versione di, diciamo postgresql, in giro e impedirne l'aggiornamento quando esegui la brew update; brew upgradeprocedura naturale , puoi aggiungere una formula:
$ brew pin postgresql
Le formule bloccate sono elencate in /usr/local/Library/PinnedKegs/e una volta che desideri apportare le ultime modifiche e gli aggiornamenti, puoi sbloccarlo di nuovo:
$ brew unpin postgresql
git checkout fa992 -- Library/Formula/postgresql.rb. Al termine, puoi annullare le modifiche alla formula utilizzando git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb.
brew updatestabilire il suo repository Git.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core, quindi è possibile utilizzare git checkout 4cce79d -- Formula/go.rbe HOMEBREW_NO_AUTO_UPDATE=1 brew install go.
Ora che Homebrew / version è stato deprecato, Homebrew / core supporta più versioni di formule con un nuovo formato di denominazione.
Per installare una versione specifica, ad esempio postgresql 9.5, devi semplicemente eseguire:
$ brew install postgresql@9.5
Per elencare le versioni disponibili, esegui una ricerca con @:
$ 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. cdInvece mi inserisco nella directory (senza FORMULANAME.rb), quindi git checkout 120938
cd /usr/localprima.
brew unlink FORMULANAME
brew versions <formula>non è più supportato.
brew link --force postgresql@9.5. Se hai già installato una versione più recente e desideri che la versione precedente sia quella predefinita, ti servirà anche una versione --overwrite.
Ora c'è un modo molto più semplice per installare una versione precedente di una formula che avevi installato in precedenza. Basta usare
brew switch [formula] [version]
Ad esempio, alterno regolarmente tra Node.js 0.4.12 e 0.6.5:
brew switch node 0.4.12
brew switch node 0.6.5
Dal momento brew switchche cambia solo i collegamenti simbolici, è molto veloce. Vedi ulteriore documentazione sul Wiki Homebrew alla voce Comandi esterni .
brew switchsi affida alla versione ricercata già installata. Sfortunatamente, la risposta attualmente accettata è incredibilmente inutile, contorta e obsoleta. Di seguito ci sono risposte migliori che sono molto più utili.
Aggiornamento: 15/01/2015

brew install <url>(potrebbe essere necessario brew unlinkprima, ad es. brew unlink docker)brew switch docker 1.3.3brew switch docker 1.4.1Da questo senso
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>. Altrimenti, questo è il modo più semplice e conciso (finora) per passare a una versione specifica di una formula.
Rawpremuto il pulsante su quale file ?!
brew log <formula>
Sulla falsariga del suggerimento di @ halfcube, questo funziona davvero bene:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rbpackage@version
git log master -- Formula/PACKAGENAME.rbper ottenere la cronologia del commit, controllare il commit corretto, quindi eseguirlo brew install Formula/PACKAGENAME.rbper installarlo.
brew unlinkprima brew installdi altre versioni.
mxcl?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rbma ottengo l'errore, probabilmente dovuto alla @firma: 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.Qualche idea?
Ho scoperto una soluzione alternativa migliore rispetto alle altre soluzioni complesse.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
Questo scaricherà e installerà PostgreSQL 8.4.8
Ho trovato questa soluzione iniziando a seguire i passaggi della ricerca nel repository e un commento nel repository.
Dopo un po 'di ricerca è emerso che qualcuno ha una collezione di formule rare con cui preparare.
Se stai cercando MySQL 5.1.x, provalo.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rbsembrava non riuscire con errori di sintassi.
rawURL
homebrew-versionsè andato e tutto è su coreora, in modo che il caso generale è: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb. COMMITpuò essere trovato andando su github.com/Homebrew/homebrew-core/commits/master/Formula/… .
È possibile utilizzare la strategia di identificazione della formula e un particolare commit nella cronologia della formula che corrisponde alla versione del pacchetto che si desidera installare.
Premi tsulla tastiera per attivare il file finder.
Identifica una formula che appaia più pertinente, forse Formula/mysql.rb:, portandoti in una posizione del file forumla: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb .
Guarda la cronologia delle revisioni facendo clic sul Historypulsante, che si trova su https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb . Se sei interessato a MySQL 5.7.10, potresti fare clic sull'ultima revisione precedente alla 5.7.11, che passa a un commit GitHub:
NOTA: potrebbe essere necessario visualizzare la cronologia di commit nella console in base al suggerimento di GitHub se la cronologia di commit non viene caricata nel browser. Sostituisci il commit SHA sopra nell'URL se sei interessato a vedere quel commit su GitHub. In alternativa, vai al passaggio 7, di seguito.
Fare clic sul pulsante "Visualizza" per visualizzare l'origine del file mysql.rb dopo l'applicazione del commit.
Quindi fare clic sul pulsante "Raw" per visualizzare la fonte raw.
Copia l'URL. In alternativa, crea tu stesso l'URL con il mysql.rbnome del file per identificare la tua formula e la particolare versione di quella formula (identificata dal commit SHA nell'URL seguente).
Installalo con $ brew install [URL from step 7]
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
NOTA: questa risposta è stata aggiornata per tenere conto della rimozione del sito Web braumeister.org. Lo stesso principio si applica, braumeister ha semplicemente fornito un modo adatto ai principianti per navigare tra le versioni delle formule.
La maggior parte delle altre risposte sono ormai obsolete. Sfortunatamente Homebrew non ha ancora un modo integrato di installare una versione obsoleta, a meno che quella versione non esista come formula separata (ad es. python@2, postgresql@9.4 ...).
Fortunatamente, per altre formule c'è un modo molto più semplice del disordine contorto che era necessario. Ecco le istruzioni complete:
Cerca la versione corretta nei log:
brew log formula
# Scroll down/up with j/k or the arrow keys
# or use eg. /4\.4\.23 to search a specific version
# This syntax only works on pre-2.0 Homebrew versions
brew log --format=format:%H\ %s -F --grep=‹version› ‹formula›
Questo mostrerà un elenco di hash di commit. Prendi quello che è appropriato (per lo più dovrebbe essere abbastanza ovvio, e di solito è il più recente (cioè in alto).
Trova l'URL in cui risiede la formula nel repository upstream:
brew info ‹formula› | grep ^From:
Correggi l'URL:
github.comconraw.githubusercontent.comblob/mastercon l'hash di commit che abbiamo trovato nel primo passaggio.Installa la versione desiderata sostituendo masterl'URL precedentemente trovato con l'hash di commit, ad esempio:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
(L'ultimo passaggio può richiedere l'esecuzione brew unlink ‹formula›prima.)
Se hai copiato un hash di commit che desideri utilizzare, puoi utilizzare qualcosa come questo esempio per installare quella versione, sostituendo il valore e bashcon il tuo hash di commit e la formula desiderata.
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
Questo esempio sta installando bash 4.4.23 invece di bash 5, sebbene se in seguito si eseguisse un brew upgradebash, bash 5 verrebbe installato sopra, a meno che non sia stato eseguito per la prima volta brew pin bash. Invece di fare questo più liscia senza pinning, si deve prima installare l'ultima con brew install bash, quindi brew unlink bash, quindi installare la versione precedente che si desidera per lo script di cui sopra, e quindi utilizzare brew switch bash 4.4.23per impostare i link simbolici alla versione precedente. Ora a brew upgradenon dovrebbe influenzare la tua versione di Bash. È possibile brew switch bashottenere un elenco delle versioni disponibili per passare a.
Un altro modo per raggiungere lo stesso obiettivo sembra essere:
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.
Questo crea un formula@versiontocco personalizzato che puoi installare nell'esempio sopra. Il rovescio della medaglia è che probabilmente è ancora necessario brew unlink bashe quindi brew link bash@4.4.23per utilizzare la versione specifica di Bash o qualsiasi altra formula.
brew logcui eventuali extra -Fo --grepopzioni stavano fallendo per me.
brew log. Non posso preoccuparmi di scrivere una nuova versione ora perché ciò richiede un'analisi corretta del messaggio di log git, o in alternativa in esecuzione git logdirettamente sul repository corrispondente. E il log delle modifiche non sembra nemmeno menzionare questo cambiamento radicale. Oltre fastidioso.
External Commandpotrebbe essere necessario operare all'interno della struttura brewper ottenere quel tipo di git logfiltro. docs.brew.sh/External-Commands
brew extractuso corretto , grazie!
Ho appena usato Homebrew per tornare a Maven 2.2.1 dal semplice brew install maven Maven 3.0.3 installato.
Per prima cosa devi lasciare lì il dir del Maven
$ brew unlink maven
Utilizzare il comando brew tap
$ brew tap homebrew / versioni Clonazione in '/ usr / local / Library / Taps / homebrew-version' ... telecomando: conteggio degli oggetti: 590, fatto. remoto: compressione degli oggetti: 100% (265/265), fatto. remoto: totale 590 (delta 362), riutilizzato 549 (delta 325) Ricezione di oggetti: 100% (590/590), 117,49 KiB | 79 KiB / s, fatto. Delta di risoluzione: 100% (362/362), fatto. Maschiato 50 formula
Ora puoi installare la formula di maven2:
$ brew install maven2 ==> Download http://www.apache.org/dist/maven/maven-2/2.2.1/binaries/apache-maven-2.2.1-bin.tar.gz ################################################## ###################### 100,0% /usr/local/Cellar/maven2/2.2.1: 10 file, 3,1 M, integrato in 6 secondi
$ mvn --version Apache Maven 2.2.1 (r801777; 2009-08-06 12: 16: 01-0700) Versione Java: 1.6.0_37 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Impostazioni internazionali predefinite: en_US, codifica piattaforma: MacRoman Nome del sistema operativo: "mac os x" versione: "10.7.4" arch: "x86_64" Famiglia: "mac"
Modifica:
puoi anche brew switch maven 2.2.1passare a una versione diversa.
Modifica: il progetto Apache Maven ha riorganizzato il loro repository. Aggiornato questa risposta per tenere conto di questa modifica.
Sulla base del flusso di lavoro descritto da @tschundeee e l'aggiornamento 1 di @ Debilski , ho automatizzato la procedura e aggiunto la pulizia in questo script .
Scaricalo , mettilo nel tuo percorso e brewv <formula_name> <wanted_version>. Per il PO specifico, sarebbe:
cd path/to/downloaded/script/
./brewv postgresql 8.4.4
:)
Una risposta aggiornata da allora si aggiunge a ciò che @ lance-pollard ha già pubblicato come risposta funzionante.
Come installare una versione specifica di una formula (la formula utilizzata in questo esempio è terraform):
git log master -- Formula/terraform.rbse hai clonato il repository localmente.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rbSfortunatamente Homebrew non ha ancora un modo ovvio per installare una versione precedente.
Fortunatamente, per la maggior parte delle formule c'è un modo molto più semplice del disordine contorto che era necessario. Ecco le istruzioni complete usando bashcome esempio:
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.
Questo crea il formula@versiontocco personalizzato che puoi installare nell'esempio sopra. Una nota importante è che probabilmente è necessario brew unlink bashse in precedenza fosse stata installata la versione predefinita / più recente della formula e quindi brew link bash@4.4.23per utilizzare la versione specifica di Bash (o qualsiasi altra formula in cui è installata la versione più recente e una precedente).
Un potenziale svantaggio di questo metodo è che non si può facilmente passare avanti e indietro tra le versioni perché secondo brewesso è una "formula diversa".
Se vuoi essere in grado di usare brew switch $FORMULA $VERSIONdovresti usare il metodo successivo.
Questo esempio mostra l'installazione della bash 4.4.23 precedente, un esempio utile poiché la bashformula attualmente installa bash 5.
brew install bashbrew unlink bashbrew switch bash 4.4.23per impostare i collegamenti simbolici alla tua versioneSe hai eseguito una brew upgradedopo l'installazione di una versione precedente senza prima installare l'ultima, allora l'ultima verrebbe installata bloccando la tua versione precedente, a meno che non sia stata eseguita per la prima volta brew pin bash.
I passaggi qui EVITANO di appuntare perché è facile dimenticarsene e potresti appuntare una versione che diventerà insicura in futuro (vedi Shellshock / etc). Con questa configurazione a brew upgradenon dovrebbe interessare la tua versione di Bash ed è sempre possibile eseguire brew switch bashper ottenere un elenco delle versioni disponibili per passare a.
Copia e incolla e modifica le exportrighe dallo snippet di codice in basso per aggiornare con la versione e il nome della formula desiderati, quindi copia e incolla il resto così com'è e utilizzerà tali variabili per fare la magia.
# 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
Quando sei sicuro che la versione esiste nella formula, puoi usare quanto segue:
# 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}')
Dopo aver esportato l'hash di commit che si desidera utilizzare, è possibile utilizzarlo per installare quella versione del pacchetto.
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
Segui le indicazioni nell'output della formula per inserirlo nel tuo PERCORSO o impostalo come shell predefinita.
Sulla versione più recente di homebrew (0.9.5 al momento della stesura di questo documento) ci sarà una ricetta specifica per la versione del fusto homebrew che si desidera installare. Esempio:
$ brew search mongodb
mongodb mongodb24 mongodb26
Quindi fai brew install mongodb26come al solito.
Nel caso in cui si era già installato la versione più recente, assicurarsi di scollegare la versione più recente e collegare la versione desiderata: brew unlink mongodb && brew link mongodb26.
Il problema homebrew/versionsè che qualcuno deve avere quella versione specifica del software elencata nel repository affinché tu possa usarla. Inoltre, poiché brew versionsnon è più supportato, è necessaria un'altra soluzione. Per le soluzioni che indicano l'utilizzo brew switch, questo funzionerà solo se non l'hai fatto brew cleanuppoiché la versione deve esistere sul tuo computer.
Ho avuto un problema con il voler installare una versione precedente specifica di docker-machinecui non era elencato homebrew/versions. Ho risolto questo problema usando il seguente, che dovrebbe funzionare anche con qualsiasi software installato brew. L'esempio che segue utilizzerà docker-machineil pacchetto che voglio effettuare il downgrade dalla versione 0.5.0 alla 0.4.1.
Vai alla tua Formuladirectory homebrew .
Puoi determinarlo eseguendo brew info [any package name]. Ad esempio, brew info docker-machinemi dà una linea che mi mostra un percorso - /usr/local/Cellar/docker-machine/0.5.0. Questo mi dice che sul mio computer, homebrew è installato in /usr/locale la mia Formula
directory si trova di default in/usr/local/Library/Formula
Individua il file formula specifico (.rb) per il tuo pacchetto.
Dal momento che voglio effettuare il downgrade docker-machine, posso vedere un docker-machine.rbfile.
Ottieni la cronologia delle versioni per questo file formula . accederegit log docker-machine.rb . Questo elencherà la cronologia completa del commit per questo file. Vedrai un output in questo modo:
...Di Più
commit 20c7abc13d2edd67c8c1d30c407bd5e31229cacc
Autore: BrewTestBot
Data: gio 5 nov 16:14:18 2015 +0000
docker-machine: aggiornamento bottiglia 0.5.0.
commit 8f615708184884e501bf5c16482c95eff6aea637
Autore: Vincent Lesierse
Data: mar 27 ott 22:25:30 2015 +0100
docker-machine 0.5.0
Finestra mobile aggiornata alla 0.5.0
Chiude # 45403.
Firmato-fuori-da: Dominyk Tiller
commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
Autore: BrewTestBot
Data: lunedì 21 settembre 14:04:04 2015 +0100
docker-machine: aggiornamento bottiglia 0.4.1.
commit 18fcbd36d22fa0c19406d699308fafb44e4c8dcd
Autore: BrewTestBot
Data: dom 16 ago 09:05:56 2015 +0100
docker-machine: aggiornamento bottiglia 0.4.1.
...Di Più
La parte difficile è trovare l'ultimo commit per la versione specifica desiderata. In quanto sopra, posso dire l'ultima versione 0.4.1 è stato commesso con questo commettere tag: commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423. I commit sopra questo punto iniziano con la versione 0.5.0 (le voci del registro git sono elencate dalla data più recente alla prima).
Ottieni una versione precedente del file della formula. Utilizzando il tag commit dal passaggio 3 (è possibile utilizzare i primi 6 caratteri), è possibile ottenere una versione precedente del file formula utilizzando quanto segue:
git checkout 5970e1 docker-machine.rb
Disinstallare la versione del pacchetto corrente.
Basta eseguire i normali comandi brew per disinstallare la versione corrente del pacchetto.
Ex.brew uninstall docker-machine
Installa la versione precedente del pacchetto
Ora, puoi semplicemente eseguire il normale comando brew install e installerà la formula che hai verificato. Ex.brew install docker-machine
Potrebbe essere necessario ricollegare utilizzando il brew link docker-machinese necessario.
Se in qualsiasi momento desideri ripristinare la versione più recente di un pacchetto specifico, vai nella directory Formula ed esegui i seguenti comandi sul tuo file formula (.rb)
git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
Quindi è possibile brew uninstall docker-machinee brew install docker-machineottenere l'ultima versione e continuare così.
git log --grep 0.4.1 docker-machine.rb.
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
cairobirra in questo modo. La risposta di @ Sealocal ha mostrato di più, per qualche motivo.
La mia situazione: è postgresqlstato aggiornato da 11 a 12 per errore. Voglio mantenere 11.
brew services stop postgresql
brew install postgresql@11
brew link postgresql@11 --force
postgresa postgres@11:cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11
brew services start postgresql@11
In caso di errori, controllare /usr/local/var/log/postgresql@11.log(notare @ 11).
brew postgresql-upgrade-database). Questa risposta non è utile per quasi qualsiasi altra formula.
brew postgresql-upgrade-databaseè, beh, per gli aggiornamenti . La mia risposta riguarda l'uso di una versione precedente di Postgres. Il semplice cambio di binari non funzionerà.
nvmFYI, ho avuto fortuna con questa tecnica per le versioni precedenti di LTS. Almeno al momento della stesura di v10 e v12 dovrebbe essere disponibile, ad esempio brew install node@12 formulae.brew.sh/formula/node
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/
O
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.rbdalla homebrew-coredirectory? ha funzionato per me senza usare l' raw.github..indirizzo
potrebbe essere fatto molto facilmente per l'ultima versione di 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)
Nessuno di questi ha funzionato davvero per il mio caso (Python), quindi aggiungerò i miei 2 centesimi:
cd `brew --prefix`
git log Library/Formula/python.rb
L'output è simile al seguente:
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. ...
Voglio la versione 2.7.11così il mio hash è cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9(o cf5da05in breve). Successivamente, controllo quella versione e installo la formula python:
git checkout cf5da05
brew install python
Infine, pulisci:
git checkout master
HOMEBREW_NO_AUTO_UPDATEe leggere github.com/Homebrew/brew/issues/1188
cd brew --prefix /Homebrewegit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Tapsviene ignorato.
HOMEBREW_NO_AUTO_UPDATE. Sì, non dimenticare ciò di cui hai bisogno fino a quando non scopri di averne bisogno. xD
HOMEBREW_NO_INSTALL_CLEANUPnon è qualcosa che devi ricordare?
Se non riesci a trovare la tua versione brew search <formula>, puoi anche provare a consultare i registri di commit per la tua formula per trovare la versione desiderata:
ecco un esempio per l'installazione di una versione precedente di nginx tramite brew:
vedere nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
Da lì, possiamo installare 1.6.3con l'URL sha e raw git:
brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
Attualmente i vecchi modi di installare specifiche versioni di formula sono stati deprecati. Quindi sembra che dobbiamo usare brew edit [formula]. Ad esempio, diciamo che vogliamo installare una 62.1versione di icu4c(necessaria ad esempio per postgresql 10.5). Quindi dovresti
> brew edit icu4c
# drops you to editor
Qui dovresti modificare url, versione sha256(forse anche mirror) le 62.1stringhe corrispondenti .
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"
quindi corri brew reinstall icu4cper scaricare finalmente la 62.1versione.
sha256 ? nel mio casohttps://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip
Aggiornamento sulla libreria / formula / postgresql.rb riga 8 a
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2
E MD5 sulla linea 9 a
fcc3daaf2292fa6bf1185ec45e512db6
Salva ed esci.
brew install postgres
initdb /usr/local/var/postgres
Ora in questa fase potresti riscontrare l' postgresql could not create shared memory segmenterrore, per aggirare quell'aggiornamento in /etc/sysctl.confquesto modo:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Riprova initdb /usr/local/var/postgrese dovrebbe funzionare senza problemi.
Per eseguire postgresql all'avvio
launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist
Spero che aiuti :)
Ho appena copiato una versione precedente di elasticsearch nella /usr/local/Cellar/elasticsearchdirectory.
$ 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
Questo è tutto. Forse è utile per chiunque.
Ho deciso, contro il mio miglior giudizio, di creare una formula per Maven 3.1.1, che homebrew/versionsnon aveva. Per farlo:
homebrew/versionssu Github.$(brew --prefix)/Library/Tapsalla copia di lavoro locale del mio fork. Chiamerò questo my-homebrew/versions.my-homebrew/versions/<formula>.homebrew/versionsper la mia nuova formula.Sìì.
Per le versioni non attualmente nelle formule predefinite di infusione, è possibile creare facilmente il proprio tocco con lo strumento da https://github.com/buildtools-version-taps/homebrew-versions-tap-tool
brew tap-new user/repoe poi brew extract --version='Major.minor' FORMULA user/repoe poi brew install FORMULA@Major.minor.
Ho creato uno strumento per facilitare il processo prescritto in questa risposta .
Per trovare un pacchetto pkgcon versione a.b.c, eseguire:
$ brew-install-specific pkg@a.b.c
Questo elencherà i commit sulla pkgformula homebrew che menziona la versione data insieme ai loro URL GitHub.
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:
Verifica il commit dall'URL specificato e inserisci l'indice del commit selezionato.
Select index: 2
Run:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb
Copia ed esegui il comando dato per l'installazione.
postgresqlè strano perché aveva versioni separate in Homebrew ad un certo punto, qualcosa del generebashpotrebbe essere un esempio migliore poiché è passato da 4.xa 5.x con lo stesso nome di formula. Vedere stackoverflow.com/a/55764594/3794873