Échec de la mise à jour de l'infusion: les fichiers d'arborescence de travail non suivis seraient remplacés par la fusion

207

En essayant de mettre à jour Homebrew avec brew updatej'ai l'erreur suivante

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

J'ai trouvé un article de blog par quelqu'un qui a rencontré un problème similaire après avoir installé Mountain Lion (ce que j'ai fait cette semaine également). Il explique comment il a supprimé les fichiers mentionnés dans le message d'erreur

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.

En supposant que ces instructions sont correctes (ce que je ne devrais peut-être pas supposer), j'ai essayé de suivre ces instructions et de faire

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

Cependant, il a dit 'le fichier n'existe pas' quand j'ai essayé de rm cocot.rb

Une chose dont je ne suis pas sûr est que ce cd $(brew --prefix)sont les mots exacts que je tape ou dois-je remplacer le préfixe par quelque chose? le cd a réussi, donc je suppose qu'il était correct - il m'a déplacé dans / usr / local, mais il n'y avait aucun fichier à supprimer. Le contenu de / usr / local est

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 tout cas, savez-vous comment je peux corriger la «mise à jour de brassage»

Mise à jour: Après avoir supprimé les fichiers selon les instructions de favoretti et essayé chown -R <your_username> $(brew --prefix)/.git, j'ai eu l'erreur suivante en cours d'exécutionbrew 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
la source
github.com/Homebrew/homebrew-core - consultez le README.md officiel de Homebrew Core. Il ne devrait pas être nécessaire d'ajuster les autorisations comme le recommandent certaines des réponses les plus anciennes. Vérifiez également que vous êtes dirigé vers l'url de la source officielle actuelle. Plus d'informations dans cette réponse: stackoverflow.com/questions/14113427/…
Kay V

Réponses:

279
cd $(brew --prefix)
git reset --hard HEAD
brew update
Strand McCutchen
la source
A eu un problème similaire à la question d'origine mais avec différents fichiers en conflit. Une réinitialisation suffit pour me permettre de mettre à jour et de résoudre le problème.
David
17
vous voudrez peut-être faire aussi git add .suivi de git stash: P
mkk
Travaille pour moi. Tapez littéralement ce cd $ (brew --prefix)
Saran
13
Si, après avoir modifié le répertoire brew avec cd $(brew --prefix)et réinitialisé l'étape git avec git reset --hard HEADvotre git statusne retourne pas le nettoyage du répertoire de travail, vous devrez peut-être également nettoyer l'état en exécutant git clean -df.
Strand McCutchen
82
Au lieu de git reset --hard HEAD(ce qui ne fonctionnerait pas pour moi), je l'ai fait git fetch --alletgit reset --hard origin/master
Kevin.
360

Vous devez effectuer les opérations suivantes:

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

Et puis faites le

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

Fondamentalement, pour expliquer un peu plus:

cd $(brew --prefix)

indique cdde changer le répertoire en tout ce qui brew --prefixsortira. Si vous essayez d'exécuter la brew --prefixcommande, vous devriez voir quelque chose dans les lignes de:

brew --prefix
/usr/local

La commande serait donc dans ce cas un équivalent de cd /usr/local. Les brewversions plus récentes ont des formules sous son préfixe d'installation etLibrary/Formula/ , c'est donc là que vous devez rechercher ces fichiers obsolètes / modifiés.

Notez que si vous avez modifié ces formules vous-même pour une raison particulière (comme épingler une version), cette action les ramènera à celles par défaut et peut produire des effets indésirables.

@TedPennings a noté dans les commentaires que cela fonctionnait pour lui, mais sa séquence était:

  1. tout montrer my_username:admin , c'est- -diresudo chown -R ted:admin $(brew --prefix)
  2. exécutez les deux commandes git ci-dessus, git fetch originetgit reset --hard origin/master
favoretti
la source
1
quand j'ai fait git reset --hard origin / master, cela ne semblait fonctionner que partiellement. Ceci est la sortie. erreur: impossible de dissocier l'ancien '.gitignore' (autorisation refusée) erreur: impossible de créer le fichier CONTRIBUTING.md (autorisation refusée) Extraction des fichiers: 100% (2493/2493), terminé. fatal: impossible de réinitialiser le fichier d'index à la révision «origine / maître».
BrainLikeADullPencil
3
Cela signifie que vos autorisations sont vissées. Une façon serait d'exécuter sudo git reset --hard, l'autre et une meilleure façon serait de corriger les autorisations et fairechown -R <your_username> $(brew --prefix)/.git
favoretti
Voici à quoi ressemblent les autorisations sur mon préfixe d'infusion:drwxrwxr-x 16 root admin 646 Dec 27 20:30 /usr/local/
favoretti
19
Cette solution a corrigé les choses pour moi, mais j'ai dû tout montrer à mon nom d'utilisateur: admin, c'est-à-dire, sudo chown -R ted:admin $(brew --prefix)puis exécuter les deux commandes git ci-dessus, git fetch originetgit reset --hard origin/master
Ted Pennings
2
@TedPennings: Cool! Je vais ajouter vos commandes à la réponse comme une étape supplémentaire possible.
favoretti
46

Cela est dû à un ancien bogue dans le updatecode qui a depuis longtemps été corrigé. Cependant, la nature du bogue nécessite que vous procédiez comme suit:

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

Si vous vous brew doctorplaignez toujours de modifications non validées, exécutez également cette commande:

cd $(brew --repository)    
git clean -fd
Eric Wu
la source
3
Cette solution a fonctionné pour moi lorsque la réponse acceptée n'a pas fonctionné.
JBCP
31
$ cd $(brew --prefix)
$ git clean -fd
$ git reset --hard
$ sudo chown -R `whoami` `brew --prefix`
$ brew update

Remarque: les étapes 2 et 3 ont fonctionné pour moi car j'ai effectué l'étape 5 avant 4 avant de recevoir l'erreur. La mise à jour de l'infusion avant de changer le propriétaire du dossier a causé tout le problème.

Ron D.
la source
Cela a fonctionné pour moi. Je voudrais ajouter que cela peut être dû à l'installation d'autres programmes /usr/localavec d'autres autorisations. Pour moi, c'est MacPGP qui s'est installé avec les privilèges root.
Overbryd
1
Cela m'a corrigé après la mise à niveau vers Mac OS X 10.11 avec /usr/localles autorisations de. Merci!
CletusW
Il convient de noter que vous n'aurez peut-être pas besoin de modifier les autorisations et de déplacer les répertoires manuellement. Voir stackoverflow.com/a/40599893/5440638 , par exemple.
Kay V
6

J'ai eu un problème similaire où ma bibliothèque de packages de brassage a été téléchargée en tant qu'utilisateur root, puis je n'ai pas pu exécuter la mise à jour de brassage car git se plaindrait de ne pas pouvoir fusionner le fichier.

La solution était de faire: -

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

La réinitialisation du référentiel de brassage devrait être le moyen le plus efficace si cela ne vous dérange pas d'éliminer les modifications potentielles sur les formules que vous pourriez avoir appliquées:

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

J'ai pu résoudre ce problème sur ma machine en ajoutant l'autorisation d'écriture (et le bit setgid) du groupe admin sur ces chemins:

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

Le s définit l'ID de groupe lors de l'exécution afin que les autorisations d'écriture ne soient pas perdues la prochaine fois qu'un autre utilisateur administrateur mettra à jour ou mettra à niveau Homebrew.

Cette réponse est quelque peu incomplète car lorsque j'essaie de le faire, brew cleanup --forceil y a un problème d'autorisations lorsque Homebrew essaie de supprimer du contenu dans / usr / local / Cellar /. (Malheureusement, je ne suis pas en mesure d'enquêter davantage pour le moment.)

Jimmont
la source
2
Il existe un script populaire écrit pour corriger les autorisations Homebrew qui fonctionne apparemment assez bien. Je n'ai pas eu besoin de l'utiliser moi-même; J'ai fait les changements manuellement :) Mais cela peut aider les autres: gist.github.com/rpavlik/768518
Steve Benner
1

Une autre option consiste à simplement utiliser git stash .

La commande brew update effectue un git pull, donc s'il y a des fichiers modifiés (ou même des attributs de fichier, ce qui m'est arrivé lorsque j'ai changé les autorisations dans le répertoire de manière récursive), vous devez en quelque sorte résoudre les conflits. L'utilisation git stashest un moyen; il prend toutes les modifications et les met de côté pour que vous reveniez efficacement à la dernière version mise à jour du référentiel. L'emplacement de Homebrew est par défaut /usr/localet il s'installe comme un référentiel git. Vous pouvez chercher un.git dossier pour voir par vous-même. J'écris un script de désinstallation homebrew qui sera bientôt publié sur mon profil GitHub avec plus d'informations.

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

note - pour l'utilisateur, utilisez la commande qui, c'est-à-dire votre nom d'utilisateur

sudo brew doctor
imvp
la source
ou pour généraliser: sudo chown -R $USER /usr/local/binoù l'ajout des positions $la variable env USER, qui contient le nom de l'utilisateur actuel.
Cometsong
1

Cette approche peut être plus simple que certaines. Ça implique:

  • correction d'un problème git afin que vous puissiez à nouveau déléguer la gestion des modifications.
  • aucun déplacement manuel de fichiers ou de répertoires.
  • aucun ajustement manuel des autorisations de fichier ou de répertoire.

Étapes (avec des notes pour ceux qui veulent des explications):

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 

Vue d'ensemble:
D'après ce que je peux dire, la cause réelle de ce problème est un changement dans l'URL du dépôt. C'est maintenant brewet c'était brew.git. (URL complète et à jour: https://github.com/Homebrew/brew )

Remarque 1: Cette première commande vous emmène de n'importe où dans la structure de vos fichiers vers le bon répertoire. La structure du répertoire est différente pour moi de ce que les autres montrent ci-dessus (Mac OS 10.11.16), mais avec cette commande, ces différences ne devraient pas avoir d'importance.

Remarque 2: cette deuxième commande ajoute l'URL distante correcte à un nouvel alias; Je l'ai fait juste au cas où cette approche n'atteindrait pas ce que je voulais et j'avais besoin de l'adresse précédente à nouveau. Depuis que la nouvelle télécommande a fonctionné, j'inviterai quelqu'un d'autre à commenter simplement en changeant l'URL aliasée par origine. Je mettrai volontiers à jour la réponse pour refléter ce qui a fonctionné pour vous.

Remarque 3: Cette quatrième commande a exactement le résultat souhaité: elle rapporte un grand nombre de mises à jour, y compris le rapport particulièrement agréable de "==> HOMEBREW_REPOSITORY migré vers / usr / local / Homebrew!" (mettre l'accent sur le leur).

Kay V
la source
Cela fonctionne lorsque vous obtenez 504 erreurs lors de l'exécution brew update.
Omnilord
0

Ce message m'a aidé après la mise à jour vers El Capitan. Dans mon cas, chownne fonctionnait pas ("zsh: commande introuvable: chown"), donc l'étape 1 ajoutait cette ligne à mon .zshrc:

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

J'avais déjà essayé plusieurs des réponses les plus populaires ci-dessus, donc je suis à peu près sûr que cela git statusrevenait net au moment où j'ai collé dans la commande critique du billet de blog:

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

clozach
la source
0

Cela devrait fonctionner.

1. cd `brew --prefix`
2. git fetch origin
3. git reset --hard origin/master
4. sudo brew update
Rahul Vivek
la source
Fwiw, sudo est fortement déconseillé lors de l'utilisation de homebrew. Notez les votes négatifs sur les autres réponses à cette question, ainsi que l'avertissement homebrew fournit utilement lorsque vous entrez une commande à l'aide de sudo. @ A5308Y fournit également un lien vers la FAQ expliquant pourquoi sudo est mauvais; la dernière version de cette FAQ se trouve sur github.com/Homebrew/brew/blob/master/docs/… Avez-vous essayé de suivre vos étapes sans sudo?
Kay V