Aggiornamento Brew non riuscito: i file dell'albero di lavoro non tracciati verrebbero sovrascritti dall'unione


207

Cercando di aggiornare Homebrew con brew updateho ricevuto il seguente errore

error: The following untracked working tree files would be overwrittenby merge:     
 Library/Formula/argp-standalone.rb
 Library/Formula/cocot.rb 
Please move or remove them before you can merge. 
Aborting 
Updating e088818..5909e2c 
Error: Failed while executing git pull  origin refs/heads/master:refs/remotes/origin/master

Ho trovato un post sul blog di qualcuno che ha riscontrato un problema simile dopo aver installato Mountain Lion (cosa che ho fatto anche questa settimana). Spiega come ha rimosso i file a cui si fa riferimento nel messaggio di errore

I removed these files:
$ cd $(brew --prefix)
$ rm cocot.rb
However, removing these files didn't help with the brew update. Instead I had to manually update brew through git:
$ cd $(brew --prefix)
$ git fetch origin
$ git reset --hard origin/master
$ brew update
Already up-to-date.

Supponendo che quelle istruzioni siano corrette (cosa che forse non dovrei presumere), ho provato a seguire queste istruzioni e a farlo

    $ cd $(brew --prefix)
    $ rm cocot.rb

Tuttavia, ha detto che "il file non esiste" quando ho provato a rm cocot.rb

Una cosa di cui non sono sicuro è che cd $(brew --prefix)quelle sono le parole esatte che digito o devo sostituire il prefisso con qualcosa? il cd ha avuto successo, quindi presumo che fosse corretto - mi ha spostato in / usr / local, ma non c'erano file da rimuovere. I contenuti di / usr / local sono

Cellar              clamXav             git             mysql               var Library             doc             heroku              mysql-5.5.15-osx10.6-x86_64 README.md           etc             include             rvm bin             foreman             lib             share

In ogni caso, sai come posso riparare l '"aggiornamento della birra"

Aggiornamento: Dopo aver rimosso i file secondo le istruzioni dei favoretti e provato chown -R <your_username> $(brew --prefix)/.git, ho ottenuto il seguente errore in esecuzionebrew update

error: The following untracked working tree files would be overwritten by merge:
    Library/Aliases/gperftools
    Library/Aliases/hashdeep
    Library/Aliases/htop
    Library/Aliases/nodejs
    Library/Aliases/ocio
    Library/Aliases/oiio
    Library/Aliases/pgrep
    Library/Aliases/pkill
    Library/Aliases/qt4
    Library/Aliases/twolame
    Library/Aliases/wxwidgets
    Library/Contributions/cmds/brew-aspell-dictionaries
    Library/Contributions/cmds/brew-beer.rb
    Library/Contributions/cmds/brew-dirty.rb
    Library/Contributions/cmds/brew-graph
    Library/Contributions/cmds/brew-grep
    Library/Contributions/cmds/brew-leaves.rb
    Library/Contributions/cmds/brew-linkapps.rb
    Library/Contributions/cmds/brew-ls-taps.rb
    Library/Contributions/cmds/brew-man
    Library/Contributions/cmds/brew-md5-to-sha1
    Library/Contributions/cmds/brew-mirror-check.rb
    Library/Contributions/cmds/brew-pull.rb
    Library/Contributions/cmds/brew-readall.rb
    Library/Contributions/cmds/brew-server
    Library/Contributions/cmds/brew-services.rb
    Library/Contributions/cmds/brew-switch.rb
    Library/Contributions/cmds/brew-test-bot.rb
    Library/Contributions/cmds/brew-tests.rb
    Library/Contributions/cmds/brew-unpack.rb
    Library/Contributions/cmds/brew-which.rb
    Library/Contributions/cmds/git
    Library/Contributions/cmds/svn
    Library/ENV/4.3/apr-1-config
    Library/ENV/4.3/bsdmake
    Library/ENV/4.3/c++
    Library/ENV/4.3/c89
    Library/ENV/4.3/c99
    Library/ENV/4.3/cc
    Library/ENV/4.3/clang
    Library/ENV/4.3/clang++
    Library/ENV/4.3/cpp
    Library/ENV/4.3/g++
    Library/ENV/4.3/gcc
    Library/ENV/4.3/git
    Library/ENV/4.3/i686-apple-darwin11-llvm-g++-4.2
    Library/ENV/4.3/i686-apple-darwin11-llvm-gcc-4.2
    Library/ENV/4.3/ld
    Library/ENV/4.3/llvm-g++
    Library/ENV/4.3/llvm-g++-4.2
    Library/ENV/4.3/llvm-gcc
    Library/ENV/4.3/llvm-gcc-4.2
    Library/ENV/4.3/make
    Library/ENV/4.3/mig
    Library/ENV/4.3/sed
    Library/ENV/4.3/svn
    Library/ENV/4.3/xcrun
    Library/ENV/libsuperenv.rb
    Library/ENV/pkgconfig/leopard/libcrypto.pc
    Library/ENV/pkgconfig/leopard/libcurl.pc
    Library/ENV/pkgconfig/mountain_lion/libcurl.pc
    Library/ENV/pkgconfig/mountain_lion/libexslt.pc
    Library/ENV/pkgconfig/mountain_lion/libxml-2.0.pc
    Library/ENV/pkgconfig/mountain_lion/libxslt.pc
    Library/Formula/abcl.rb
    Library/Formula/abcmidi.rb
    Library/Formula/aiccu.rb
    Library/Formula/akka.rb
    Library/Formula/alac.rb
    Library/Formula/alure.rb
    Library/Formula/appledoc.rb
    Library/Formula/arangodb.rb
    Library/Formula/argp-standalone.rb
    Library/Formula/argtable.rb
    Library/Formula/autopano-sift-c.rb
    Library/Formula/avian.rb
    Library/Formula/avidemux.rb
    Library/Formula/avro-cpp.rb
    Library/Formula/aws-cloudsearch.rb
    Library/Formula/aws-sns-cli.rb
    Library/Formula/backupninja.rb
    Library/Formula/bact.rb
    Library/Formula/bam.rb
    Library/Formula/basex.rb
    Library/Formula/berkeley-db4.rb
    Library/Formula/bind.rb
    Library/Formula/blazeblogger.rb
    Library/Formula/bochs.rb
    Library/Formula/boost149.rb
    Library/Formula/bsdconv.rb
    Library/Formula/bsdmake.rb
    Library/Formula/buildapp.rb
    Library/Formula/bup.rb
    Library/Formula/byacc.rb
    Library/Formula/cadubi.rb
    Library/Formula/camellia.rb
    Library/Formula/casperjs.rb
    Library/Formula/ccextractor.rb
    Library/Formula/cconv.rb
    Library/Formula/cdo.rb
    Library/Formula/cdpr.rb
    Library/Formula/cgvg.rb
    Library/Formula/checkstyle.rb
    Library/Formula/chordii.rb
    Library/Formula/chruby.rb
    Library/Formula/cifer.rb
    Library/Formula/clhep.rb
    Library/Formula/cntlm.rb
    Library/Formula/cocot.rb
    Library/Formula/cogl.rb
    Library/Formula/collada-dom.rb
    Library/Formula/crash.rb
    Library/Formula/crossroads.rb
    Library/Formula/crosstool-ng.rb
    Library/Formula/css-crush.rb
    Library/Formula/csync.rb
    Library/Formula/ctemplate.rb
    Library/Formula/curlftpfs.rb
    Library/Formula/cutter.rb
    Library/Formula/cvsutils.rb
    Library/Formula/darkstat.rb
    Library/Formula/darner.rb
    Library/Formula/dart.rb
    Library/Formula/dasm.rb
    Library/Formula/debianutils.rb
    Library/Formula/dfc.rb
    Library/Formula/dgtal.rb
    Library/Formula/dhcping.rb
    Library/Formula/di.rb
    Library/Formula/dmtx-utils.rb
    Library/Formula/drip.rb
    Library/Formula/dsniff.rb
    Library/Fo
Aborting
Updating e088818..c1fbc29
Error: Failed while executing git pull  origin refs/heads/master:refs/remotes/origin/master


github.com/Homebrew/homebrew-core : controlla il README.md ufficiale di Homebrew Core. Non dovrebbe essere necessario modificare le autorizzazioni come consigliano alcune delle risposte precedenti. Controlla anche di essere indirizzato all'attuale URL della fonte ufficiale. Maggiori informazioni in questa risposta: stackoverflow.com/questions/14113427/…
Kay V

Risposte:


280
cd $(brew --prefix)
git reset --hard HEAD
brew update

Si è verificato un problema simile alla domanda originale ma con diversi file in conflitto. Il solo ripristino è stato sufficiente per consentirmi di aggiornare e risolvere il problema.
David

17
potresti voler fare anche git add .seguito da git stash: P
mkk

Per me va bene. Scrivi letteralmente questo cd $ (brew --prefix)
Saran

13
Se, dopo essere passati alla directory brew con cd $(brew --prefix)e reimpostare lo stage git con il git reset --hard HEADtuo git statusnon restituisce la directory di lavoro clean, potresti anche dover ripulire lo stato eseguendo git clean -df.
Strand McCutchen

82
Invece di git reset --hard HEAD(che non avrebbe funzionato per me), ho fatto git fetch --allegit reset --hard origin/master
Kevin.

360

Devi fare quanto segue:

cd $(brew --prefix)
rm Library/Formula/argp-standalone.rb
rm Library/Formula/cocot.rb

E poi fai il file

git fetch origin
git reset --hard origin/master
brew update

Fondamentalmente, per spiegare un po 'di più:

cd $(brew --prefix)

dice cddi cambiare la directory in qualunque cosa brew --prefixverrà emessa. Se provi a eseguire il brew --prefixcomando dovresti vedere qualcosa in righe di:

brew --prefix
/usr/local

Quindi il comando in questo caso sarebbe un equivalente di cd /usr/local. Le brewversioni più recenti hanno formule sotto il prefisso di installazione e Library/Formula/, quindi è lì che devi cercare quei file obsoleti / modificati.

Nota che se hai modificato queste formule da solo per un motivo particolare (come bloccare una versione), questa azione le ripristinerà a quelle predefinite e potrebbe produrre effetti indesiderati.

@TedPennings ha notato nei commenti che questo ha funzionato per lui, ma la sua sequenza era:

  1. chown tutto per my_username:admin, cioè,sudo chown -R ted:admin $(brew --prefix)
  2. eseguire i due comandi git sopra git fetch originegit reset --hard origin/master

1
quando ho eseguito git reset --hard origin / master, sembrava funzionare solo parzialmente. Questo è l'output. errore: impossibile scollegare il vecchio ".gitignore" (autorizzazione negata) errore: impossibile creare il file CONTRIBUTING.md (autorizzazione negata) Estrazione dei file: 100% (2493/2493), fatto. irreversibile: impossibile reimpostare il file di indice alla revisione "origine / master".
BrainLikeADullPencil

3
Significa che i tuoi permessi sono fottuti. Un modo sarebbe correre sudo git reset --hard, un altro e un modo migliore sarebbe fissare i permessi e farechown -R <your_username> $(brew --prefix)/.git
favoretti

Ecco come appaiono i permessi sul mio prefisso della birra qui:drwxrwxr-x 16 root admin 646 Dec 27 20:30 /usr/local/
favoretti

19
Questa soluzione ha risolto le cose per me, ma ho dovuto chown tutto sul mio nome utente: admin, cioè, sudo chown -R ted:admin $(brew --prefix)e quindi eseguire i due comandi git sopra git fetch originegit reset --hard origin/master
Ted Pennings

2
@TedPennings: Cool! Aggiungerò i tuoi comandi alla risposta come possibile passaggio aggiuntivo.
favoretti

46

Ciò è causato da un vecchio bug nel updatecodice che è stato risolto da tempo. Tuttavia, la natura del bug richiede che tu faccia quanto segue:

cd $(brew --repository)
git reset --hard FETCH_HEAD

Se brew doctorsi lamenta ancora delle modifiche non salvate, eseguire anche questo comando:

cd $(brew --repository)    
git clean -fd

3
Questa soluzione ha funzionato per me quando la risposta accettata non ha funzionato.
JBCP

31
$ cd $(brew --prefix)
$ git clean -fd
$ git reset --hard
$ sudo chown -R `whoami` `brew --prefix`
$ brew update

Nota: i passaggi 2 e 3 hanno funzionato per me poiché ho eseguito il passaggio 5 prima del 4 prima di ricevere l'errore. L' aggiornamento della birra prima di cambiare il proprietario della cartella ha causato l'intero problema.


Questo ha funzionato per me. Vorrei aggiungere che questo può essere causato da altri programmi che installano roba /usr/localcon altre autorizzazioni. Per me è stato MacPGP che si installava da solo con i privilegi di root.
Overbryd

1
Questo mi ha risolto dopo che l'aggiornamento a Mac OS X 10.11 ha incasinato /usr/localle autorizzazioni di. Grazie!
CletusW

Vale la pena notare che potrebbe non essere necessario modificare le autorizzazioni e spostare manualmente le directory. Vedi stackoverflow.com/a/40599893/5440638 , ad esempio.
Kay V

6

Ho avuto un problema simile in cui la mia libreria di pacchetti brew veniva scaricata come utente root e quindi non ero in grado di eseguire brew update poiché git si lamentava di non essere in grado di unire il file.

La soluzione era fare: -

sudo chown -R <user> /usr/local/Library

5

Il ripristino del repository di birra dovrebbe essere il modo più efficiente se non ti dispiace scartare potenziali modifiche alle formule che potresti essere stato applicato:

$ cd `brew --prefix`
$ git fetch origin
$ git reset --hard origin/master
$ brew cleanup --force
$ brew update

4

Sono stato in grado di risolvere questo problema sulla mia macchina aggiungendo l'autorizzazione di scrittura del gruppo amministratore (e setgid bit) a questi percorsi:

sudo chmod -R g+ws /usr/local /Library/Caches/Homebrew

La s imposta l'ID del gruppo in esecuzione in modo che i permessi di scrittura non vengano persi la prossima volta che un utente amministratore diverso aggiorna o aggiorna Homebrew.

Questa risposta è alquanto incompleta perché quando provo a farlo brew cleanup --forcec'è un problema di autorizzazioni quando Homebrew tenta di rimuovere il contenuto in / usr / local / Cellar /. (Sfortunatamente al momento non sono in grado di indagare ulteriormente.)


2
C'è uno script popolare scritto per correggere i permessi Homebrew che apparentemente funziona abbastanza bene. Non ho avuto bisogno di usarlo da solo; Ho apportato manualmente le modifiche :) Ma questo potrebbe aiutare gli altri: gist.github.com/rpavlik/768518
Steve Benner

1

Un'altra opzione è usare solo git stash.

Il comando brew update esegue un git pull, quindi se ci sono file modificati (o anche attributi di file, che mi è successo quando ho cambiato i permessi nella directory in modo ricorsivo) devi in ​​qualche modo correggere i conflitti. L'uso git stashè un modo; prende tutte le modifiche e le mette da parte in modo da tornare effettivamente all'ultima versione del repository aggiornata. La "posizione" di Homebrew è predefinita /usr/locale viene installata come repository git. Puoi cercare una .gitcartella per vedere di persona. Sto scrivendo uno script di disinstallazione homebrew da pubblicare presto sul mio profilo GitHub con maggiori informazioni.


1
sudo chown -R USER /usr/local/bin

nota - per USER usa il comando who cioè il tuo nome utente

sudo brew doctor

o per generalizzare: sudo chown -R $USER /usr/local/bindove l'aggiunta di $pone la variabile env USER, che contiene l'attuale USERname.
Cometsong

1

Questo approccio potrebbe essere più semplice di altri. Implica:

  • risolvendo un problema di git in modo da poter delegare nuovamente la gestione delle modifiche.
  • nessuno spostamento manuale di file o directory.
  • nessuna regolazione manuale dei permessi di file o directory.

Passaggi (con note per chi vuole spiegazioni):

cd $(brew --repository)                              // see Note 1 below
git remote add brew https://github.com/Homebrew/brew // see Note 2 below
git pull brew master                                 // promising fast-forward report!
brew update                                          // see Note 3 below 

Panoramica:
da quello che posso dire, la vera causa di questo problema è una modifica nell'URL del repository. È adesso brewe lo era brew.git. (URL aggiornato completo: https://github.com/Homebrew/brew )

Nota 1: questo primo comando ti porta da qualsiasi punto della struttura del tuo file alla directory corretta. La struttura della directory per me è diversa da quella mostrata dagli altri sopra (Mac OS 10.11.16), ma con questo comando, queste differenze non dovrebbero avere importanza.

Nota 2: questo secondo comando aggiunge l'URL remoto corretto a un nuovo alias; L'ho fatto nel caso in cui questo approccio non avesse ottenuto ciò che volevo e avessi bisogno di nuovo dell'indirizzo precedente. Poiché il nuovo telecomando ha funzionato, inviterò qualcun altro a commentare semplicemente cambiando l'URL con alias per origine. Aggiornerò felicemente la risposta per riflettere ciò che ha funzionato per te.

Nota 3: questo quarto comando ha esattamente il risultato desiderato: riporta un gran numero di aggiornamenti, incluso il report particolarmente carino di "==> Migrated HOMEBREW_REPOSITORY to / usr / local / Homebrew!" (enfasi loro).


Funziona quando ricevi errori 504 durante l'esecuzione brew update.
Omnilord

0

Questo post mi ha aiutato dopo l'aggiornamento a El Capitan. Nel mio caso, chownnon funzionava ("zsh: command not found: chown"), quindi il passaggio 1 aggiungeva questa riga al mio .zshrc:

export PATH="$PATH:/usr/sbin"

Avevo già provato molte delle risposte più popolari sopra, quindi sono abbastanza sicuro che git statusstava uscendo pulito quando ho incollato il comando critico dal post del blog:

sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local


0

Questo dovrebbe funzionare.

1. cd `brew --prefix`
2. git fetch origin
3. git reset --hard origin/master
4. sudo brew update

Fwiw, sudo è fortemente sconsigliato quando si utilizza homebrew. Nota i voti negativi su altre risposte a questa domanda, così come l'avvertimento che homebrew fornisce utilmente quando inserisci un comando usando sudo. @ A5308Y fornisce anche un collegamento alle domande frequenti sul motivo per cui sudo non funziona; l'ultima versione di quella FAQ è su github.com/Homebrew/brew/blob/master/docs/… Hai provato a seguire i tuoi passi senza sudo?
Kay V
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.