Falha na atualização do Brew: os arquivos da árvore de trabalho não rastreados seriam substituídos por mesclagem

207

Tentando atualizar o Homebrew com brew update, recebi o seguinte erro

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

Encontrei uma postagem no blog de alguém que teve um problema semelhante depois de instalar o Mountain Lion (o que eu fiz essa semana também). Ele explica como ele removeu os arquivos mencionados na mensagem de erro

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.

Supondo que essas instruções estejam corretas (o que eu talvez não deva assumir), tentei seguir estas instruções e fazer

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

No entanto, ele disse 'arquivo não existe' quando tentei rm cocot.rb

Uma coisa que não tenho certeza é: cd $(brew --prefix)são essas as palavras exatas que digito ou preciso substituir o prefixo por alguma coisa? o cd foi bem-sucedido, então estou assumindo que estava correto - ele me mudou para / usr / local, mas não havia arquivo para remover. O conteúdo de / usr / local é

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

De qualquer forma, você sabe como posso corrigir a 'atualização de preparação'

Atualização: Depois de remover os arquivos de acordo com as instruções de favoretti e tentar chown -R <your_username> $(brew --prefix)/.git, ocorreu o seguinte erro:brew 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
BrainLikeADullPencil
fonte
github.com/Homebrew/homebrew-core - verifique o README.md oficial do Homebrew Core. Não deve haver necessidade de ajustar permissões, como recomendam algumas das respostas mais antigas. Verifique também se você está apontando para o URL da fonte oficial atual. Mais informações nesta resposta: stackoverflow.com/questions/14113427/…
Kay V

Respostas:

279
cd $(brew --prefix)
git reset --hard HEAD
brew update
Strand McCutchen
fonte
Teve um problema semelhante à pergunta original, mas com diferentes arquivos conflitantes. A redefinição foi suficiente para que eu pudesse atualizar e resolver o problema.
David
17
convém fazer também git add .seguido por git stash: P
mkk 28/02
Funciona para mim. Digite literalmente este CD $ (brew --prefix)
Saran
13
Se, depois de mudar para o diretório brew com cd $(brew --prefix)e redefinir o estágio git com o git reset --hard HEADseu git status, não retornar a limpeza do diretório de trabalho, também será necessário limpar o estado executando git clean -df.
Strand McCutchen
82
Em vez de git reset --hard HEAD(o que não funcionaria para mim), eu fiz git fetch --allegit reset --hard origin/master
Kevin.
360

Você precisa fazer o seguinte:

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

E então faça o

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

Basicamente, para explicar um pouco mais:

cd $(brew --prefix)

diz cdpara alterar o diretório para o que for brew --prefixexibido. Se você tentar executar o brew --prefixcomando, verá algo nas linhas de:

brew --prefix
/usr/local

Portanto, o comando nesse caso seria equivalente a cd /usr/local. brewVersões mais recentes têm fórmulas sob seu prefixo de instalação e Library/Formula/, portanto, é aí que você precisa procurar esses arquivos desatualizados / alterados.

Observe que, se você mesmo tiver alterado essas fórmulas por um motivo específico (como fixar uma versão), essa ação os reverterá de volta aos padrões e poderá produzir efeitos indesejados.

A @TedPennings observou nos comentários que isso funcionou para ele, mas sua sequência foi:

  1. mostrar tudo para my_username:admin, ou seja,sudo chown -R ted:admin $(brew --prefix)
  2. execute os dois comandos git acima git fetch originegit reset --hard origin/master
favoretti
fonte
1
quando eu fiz o git reset --hard origin / master, parecia funcionar apenas parcialmente. Essa é a saída. erro: não é possível desvincular o antigo erro '.gitignore' (permissão negada): não é possível criar o arquivo CONTRIBUTING.md (permissão negada) Verificando arquivos: 100% (2493/2493), concluído. fatal: Não foi possível redefinir o arquivo de índice para a revisão 'origem / mestre'.
precisa saber é o seguinte
3
Isso significa que suas permissões estão danificadas. Uma forma seria a de executar sudo git reset --hard, outros e uma maneira melhor seria permissões de correção e fazerchown -R <your_username> $(brew --prefix)/.git
favoretti
Isto é como as permissões em minha bebida olhar prefixo como aqui:drwxrwxr-x 16 root admin 646 Dec 27 20:30 /usr/local/
favoretti
19
Esta solução fixa as coisas para mim, mas eu tinha que tudo chown ao meu nome de usuário: admin, ou seja, sudo chown -R ted:admin $(brew --prefix)em seguida, execute os dois comandos do git acima, git fetch originegit reset --hard origin/master
Ted Pennings
2
@TedPennings: Legal! Vou adicionar seus comandos à resposta como uma possível etapa adicional.
Favoretti
46

Isso é causado por um bug antigo no updatecódigo que há muito tempo foi corrigido. No entanto, a natureza do bug exige que você faça o seguinte:

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

Se brew doctorainda se queixar de modificações não confirmadas, execute também este comando:

cd $(brew --repository)    
git clean -fd
Eric Wu
fonte
3
Essa solução funcionou para mim quando a resposta aceita não.
JBCP 21/01
31
$ cd $(brew --prefix)
$ git clean -fd
$ git reset --hard
$ sudo chown -R `whoami` `brew --prefix`
$ brew update

Nota: as etapas 2 e 3 funcionaram para mim desde que eu fiz as etapas 5 e 4 antes de receber o erro. A atualização de distribuição antes de alterar o proprietário da pasta causou todo o problema.

Ron D.
fonte
Isso funcionou para mim. Gostaria de acrescentar que isso pode ser causado por outros programas instalando coisas /usr/localcom outras permissões. Para mim, foi o MacPGP que se instalou com privilégios de root.
Overbryd
1
Isso foi corrigido depois que eu atualizei para o Mac OS X 10.11 e alterei /usr/localas permissões. Obrigado!
CletusW
Vale a pena notar que talvez você não precise alterar as permissões e mover os diretórios manualmente. Consulte stackoverflow.com/a/40599893/5440638 , por exemplo.
Kay V
6

Eu tive um problema semelhante em que minha biblioteca de pacotes de cervejas foi baixada como usuário root e, em seguida, não pude executar a atualização de cervejas, pois o git se queixava de não conseguir mesclar o arquivo.

A solução foi fazer: -

sudo chown -R <user> /usr/local/Library
demesne
fonte
5

A redefinição do repositório de distribuição deve ser a maneira mais eficiente, se você não se importa em descartar possíveis modificações nas fórmulas que podem ter sido aplicadas:

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

Consegui consertar isso na minha máquina adicionando permissão de gravação (e setgid bit) do grupo de administração nestes caminhos:

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

O s define a identificação do grupo na execução, para que as permissões de gravação não sejam perdidas na próxima vez que um usuário administrador diferente atualizar ou atualizar o Homebrew.

Esta resposta é um tanto incompleta porque, quando tento fazer, brew cleanup --forcehá um problema de permissões quando o Homebrew tenta remover o conteúdo em / usr / local / Cellar /. (Infelizmente não estou conseguindo investigar isso mais no momento.)

Jimmont
fonte
2
Existe um script popular escrito para corrigir as permissões do Homebrew que aparentemente funcionam muito bem. Eu não precisei usá-lo sozinho; Fiz as alterações manualmente :) Mas isso pode ajudar outras pessoas: gist.github.com/rpavlik/768518
Steve Benner
1

Outra opção é apenas usar git stash.

O comando brew update executa a git pull, portanto, se houver algum arquivo alterado (ou mesmo um atributo de arquivo, que aconteceu comigo quando eu mudei as permissões no diretório recursivamente), é necessário corrigir os conflitos. Usar git stashé uma maneira; leva todas as alterações e as coloca de lado para que você efetivamente reverta para a última versão de repo atualizada. O 'local' do Homebrew é por padrão /usr/locale é instalado como um repositório git. Você pode procurar uma .gitpasta para ver por si mesmo. Estou escrevendo um script de desinstalação do homebrew para ser postado no meu perfil do GitHub em breve com mais informações.

Steve Benner
fonte
1
sudo chown -R USER /usr/local/bin

nota - para USUÁRIO, use o comando quem, por exemplo, seu nome de usuário

sudo brew doctor
imvp
fonte
ou para generalizar: ao sudo chown -R $USER /usr/local/binadicionar os $postes a variável env USER, que contém o nome de usuário atual.
Cometsong 23/05
1

Essa abordagem pode ser mais simples do que algumas. Envolve:

  • corrigindo um problema do git para que você possa delegar novamente o gerenciamento de alterações.
  • nenhuma movimentação manual de arquivos ou diretórios.
  • sem ajustes manuais de permissões de arquivo ou diretório.

Passos (com notas para quem quer explicações):

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 

Visão geral:
Pelo que sei, a causa real desse problema é uma alteração no URL do repositório. É agora brewe foi brew.git. (URL completo e atualizado: https://github.com/Homebrew/brew )

Nota 1: Este primeiro comando leva você de qualquer lugar da estrutura de arquivos ao diretório correto. A estrutura de diretórios é diferente para mim do que os outros mostram acima (Mac OS 10.11.16), mas com este comando, essas diferenças não devem importar.

Nota 2: este segundo comando adiciona o URL remoto correto a um novo alias; Fiz isso apenas no caso de essa abordagem não alcançar o que eu queria e precisar do endereço anterior novamente. Como o novo controle remoto funcionou, convidarei alguém para comentar sobre como alterar o URL com alias por origem. Felizmente, atualizarei a resposta para refletir o que funcionou para você.

Nota 3: Este quarto comando tem exatamente o resultado desejado: ele relata um grande número de atualizações, incluindo o relatório particularmente agradável de "==> Migrado HOMEBREW_REPOSITORY para / usr / local / Homebrew!" (ênfase deles).

Kay V
fonte
Isso funciona quando você recebe erros 504 ao executar brew update.
Omnilord
0

Este post me ajudou depois de atualizar para o El Capitan. No meu caso, chownnão estava funcionando ("zsh: comando não encontrado: chown"), portanto, a etapa 1 foi adicionar esta linha ao meu .zshrc:

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

Eu já havia tentado várias das respostas mais populares acima, por isso tenho certeza de que tudo git statusestava limpo quando colei o comando crítico da postagem do blog:

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

clozach
fonte
0

Isso deve funcionar.

1. cd `brew --prefix`
2. git fetch origin
3. git reset --hard origin/master
4. sudo brew update
Rahul Vivek
fonte
Fwiw, sudo é fortemente desencorajado quando se usa homebrew. Observe os votos negativos em outras respostas a esta pergunta, bem como o aviso que o homebrew fornece de maneira útil quando você digita um comando usando o sudo. O @ A5308Y também fornece um link para o FAQ sobre por que o sudo é ruim; a versão mais recente dessa FAQ está em github.com/Homebrew/brew/blob/master/docs/… Você já tentou seguir seus passos sem o sudo?
Kay V