Error en la actualización de preparación: los archivos del árbol de trabajo no rastreados se sobrescribirán mediante la fusión

207

Intentando actualizar Homebrew con brew updateel siguiente error

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

Encontré una publicación de blog de alguien que experimentó un problema similar después de haber instalado Mountain Lion (lo que hice esta semana también). Explica cómo eliminó los archivos mencionados en el mensaje de error.

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.

Suponiendo que esas instrucciones son correctas (lo que tal vez no debería suponer), traté de seguir estas instrucciones y hacer

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

Sin embargo, decía 'el archivo no existe' cuando intenté rm cocot.rb

Una cosa de la que no estoy seguro es cd $(brew --prefix)¿Son esas las palabras exactas que escribo o tengo que reemplazar el prefijo por algo? el cd fue exitoso, así que supongo que fue correcto, me movió a / usr / local, pero no había ningún archivo para eliminar. Los contenidos de / usr / local son

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

En cualquier caso, ¿sabes cómo puedo solucionar la 'actualización de preparación'?

Actualización: después de eliminar los archivos de acuerdo con las instrucciones de favoretti e intentarlo chown -R <your_username> $(brew --prefix)/.git, recibí el siguiente errorbrew 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
fuente
github.com/Homebrew/homebrew-core : consulte el archivo README.md oficial de Homebrew Core. No debería ser necesario ajustar los permisos, como recomiendan algunas de las respuestas anteriores. También verifique que le indiquen la URL de la fuente oficial actual. Más información en esta respuesta: stackoverflow.com/questions/14113427/…
Kay V

Respuestas:

279
cd $(brew --prefix)
git reset --hard HEAD
brew update
Strand McCutchen
fuente
Tuve un problema similar a la pregunta original pero con diferentes archivos en conflicto. Solo reiniciar fue suficiente para permitirme actualizar y resolver el problema.
David
17
es posible que desee hacer también git add .seguido de git stash: P
mkk
Funciona para mi. Escriba literalmente este cd $ (brew --prefix)
Saran
13
Si, después de cambiar al directorio de preparación con cd $(brew --prefix)y restablecer la etapa git con git reset --hard HEADsu git statusno devuelve la limpieza del directorio de trabajo, es posible que también necesite limpiar el estado ejecutando git clean -df.
Strand McCutchen
82
En lugar de git reset --hard HEAD(que no funcionaría para mí), lo hice git fetch --allygit reset --hard origin/master
Kevin.
360

Debes hacer lo siguiente:

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

Y luego haz el

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

Básicamente, para explicar un poco más:

cd $(brew --prefix)

le dice cdque cambie el directorio a lo brew --prefixque salga. Si intenta ejecutar el brew --prefixcomando, debería ver algo en líneas de:

brew --prefix
/usr/local

Entonces el comando sería en este caso un equivalente de cd /usr/local. Las brewversiones más nuevas tienen fórmulas bajo su prefijo de instalación y Library/Formula/, por lo tanto, es allí donde debe buscar esos archivos obsoletos / modificados.

Tenga en cuenta que si cambió esas fórmulas usted mismo por una razón particular (como fijar una versión), esta acción las revertirá a las predeterminadas y puede producir efectos no deseados.

@TedPennings señaló en comentarios que esto funcionó para él, pero su secuencia fue:

  1. Chown todo a my_username:admin, es decir,sudo chown -R ted:admin $(brew --prefix)
  2. ejecuta los dos comandos git anteriores git fetch originygit reset --hard origin/master
favoretti
fuente
1
cuando hice git reset - hard origin / master, parecía que solo funcionaba parcialmente. Esta es la salida. error: no se puede desvincular el antiguo '.gitignore' (Permiso denegado) error: no se puede crear el archivo CONTRIBUTING.md (Permiso denegado) Extracción de archivos: 100% (2493/2493), hecho. fatal: no se pudo restablecer el archivo de índice a la revisión 'origen / maestro'.
BrainLikeADullPencil
3
Significa que tus permisos están atornillados. Una forma sería correr sudo git reset --hard, otra y una forma mejor sería arreglar los permisos y hacerlochown -R <your_username> $(brew --prefix)/.git
favoretti
Así es como se ven los permisos en mi prefijo de preparación aquí:drwxrwxr-x 16 root admin 646 Dec 27 20:30 /usr/local/
favoretti
19
Esta solución me arregló las cosas, pero tuve que asignarle todo a mi nombre de usuario: admin, es decir, sudo chown -R ted:admin $(brew --prefix)y luego ejecutar los dos comandos git anteriores, git fetch originygit reset --hard origin/master
Ted Pennings
2
@TedPennings: ¡Genial! Agregaré sus comandos a la respuesta como un posible paso adicional.
favoretti
46

Esto es causado por un error antiguo en el updatecódigo que hace tiempo se ha solucionado. Sin embargo, la naturaleza del error requiere que haga lo siguiente:

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

Si brew doctoraún se queja de modificaciones no confirmadas, ejecute también este comando:

cd $(brew --repository)    
git clean -fd
Eric Wu
fuente
3
Esta solución funcionó para mí cuando la respuesta aceptada no.
JBCP
31
$ cd $(brew --prefix)
$ git clean -fd
$ git reset --hard
$ sudo chown -R `whoami` `brew --prefix`
$ brew update

Nota: los pasos 2 y 3 me funcionaron desde que hice el paso 5 antes que el 4 antes de recibir el error. La actualización de preparación antes de cambiar el propietario de la carpeta causó todo el problema.

Ron D.
fuente
Esto funcionó para mí. Me gustaría agregar que esto puede ser causado por otros programas que instalan cosas /usr/localcon otros permisos. Para mí fue MacPGP que se instaló con privilegios de root.
Overbryd
1
Esto me lo arregló después de actualizar a Mac OS X 10.11 desordenado con /usr/locallos permisos. ¡Gracias!
CletusW
Vale la pena señalar que es posible que no necesite cambiar los permisos y mover directorios manualmente. Consulte stackoverflow.com/a/40599893/5440638 , por ejemplo.
Kay V
6

Tuve un problema similar en el que mi biblioteca de paquetes de brew se descargó como usuario root y luego no pude ejecutar brew update ya que git se quejaría de no poder fusionar el archivo.

La solución era hacer: -

sudo chown -R <user> /usr/local/Library
heredad
fuente
5

Restablecer el repositorio de preparación debería ser la forma más eficiente si no le importa descartar posibles modificaciones en las fórmulas que podría haber aplicado:

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

Pude arreglar esto en mi máquina agregando permisos de escritura de grupo de administración (y bit de ajuste) en estas rutas:

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

El s establece la identificación del grupo en la ejecución para que los permisos de escritura no se pierdan la próxima vez que un usuario administrador diferente actualice o actualice Homebrew.

Esta respuesta es algo incompleta porque cuando intento hacerlo brew cleanup --forcehay un problema de permisos cuando Homebrew intenta eliminar contenido en / usr / local / Cellar /. (Desafortunadamente no puedo investigar esto más por el momento).

jimmont
fuente
2
Hay un script popular escrito para corregir los permisos de Homebrew que aparentemente funciona bastante bien. No he necesitado usarlo yo mismo; Hice los cambios manualmente :) Pero esto puede ayudar a otros: gist.github.com/rpavlik/768518
Steve Benner
1

Otra opción es simplemente usar git stash.

El comando brew update realiza una git pull, por lo que si hay algún archivo modificado (o incluso atributos de archivo, que me sucedió cuando cambié los permisos en el directorio de forma recursiva), de alguna manera debe solucionar los conflictos. Usar git stashes unidireccional; toma los cambios y los deja a un lado para que pueda volver a la última versión actualizada del repositorio. La 'ubicación' de Homebrew es por defecto /usr/localy se instala como un repositorio git. Puedes buscar una .gitcarpeta para ver por ti mismo. Estoy escribiendo un script de desinstalación homebrew para publicarlo en mi perfil de GitHub pronto con más información.

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

nota: para el USUARIO, use el comando quién, es decir, su nombre de usuario

sudo brew doctor
imvp
fuente
o para generalizar: sudo chown -R $USER /usr/local/bindonde se agregan las $posiciones de la variable env USER, que contiene el nombre de usuario actual.
Cometsong
1

Este enfoque puede ser más simple que algunos. Implica:

  • solucionando un problema de git para que pueda delegar la administración de los cambios nuevamente.
  • sin movimientos manuales de archivos o directorios.
  • sin ajustes manuales de los permisos de archivo o directorio.

Pasos (con notas para aquellos que quieren explicaciones):

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 

Descripción general:
Por lo que puedo decir, la causa real de este problema es un cambio en la URL del repositorio. Es ahora brewy fue brew.git. (URL completa y actualizada: https://github.com/Homebrew/brew )

Nota 1: este primer comando lo lleva desde cualquier lugar de su estructura de archivos al directorio correcto. La estructura del directorio es diferente para mí de lo que otros muestran arriba (Mac OS 10.11.16), pero con este comando, esas diferencias no deberían importar.

Nota 2: este segundo comando agrega la URL remota correcta a un nuevo alias; Lo hice por si este enfoque no lograba lo que quería y necesitaba la dirección anterior nuevamente. Dado que el nuevo control remoto funcionó, invitaré a otra persona a comentar simplemente cambiando la URL con alias por origen. Felizmente actualizaré la respuesta para reflejar lo que funcionó para usted.

Nota 3: Este cuarto comando tiene exactamente el resultado deseado: informa una gran cantidad de actualizaciones, incluido el informe particularmente bueno de "==> Migrado HOMEBREW_REPOSITORY a / usr / local / Homebrew!" (énfasis suyo).

Kay V
fuente
Esto funciona cuando obtiene 504 errores al ejecutar brew update.
Omnilord
0

Esta publicación me ayudó después de actualizar a El Capitan. En mi caso, chownno funcionaba ("zsh: comando no encontrado: chown"), por lo que el paso 1 fue agregar esta línea a mi .zshrc:

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

Ya había intentado varias de las respuestas más populares anteriores, así que estoy bastante seguro de que git statusestaba claro cuando pegué el comando crítico de la publicación del blog:

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

clozach
fuente
0

Esto debería funcionar.

1. cd `brew --prefix`
2. git fetch origin
3. git reset --hard origin/master
4. sudo brew update
Rahul Vivek
fuente
Fwiw, sudo se desaconseja fuertemente cuando se usa homebrew. Tenga en cuenta los votos negativos en otras respuestas a esta pregunta, así como la advertencia que homebrew proporciona útilmente cuando ingresa un comando usando sudo. @ A5308Y también proporciona un enlace a las preguntas frecuentes sobre por qué sudo es malo; la última versión de las preguntas frecuentes está en github.com/Homebrew/brew/blob/master/docs/… ¿Has intentado seguir tus pasos sin sudo?
Kay V