Ошибка обновления Brew: неотслеживаемые файлы рабочего дерева будут перезаписаны слиянием

207

При попытке обновить Homebrew brew updateя получил следующую ошибку

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

Я нашел сообщение в блоге кем-то, у кого возникла похожая проблема после установки Mountain Lion (что я и сделал на этой неделе). Он объясняет, как он удалил файлы, указанные в сообщении об ошибке

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.

Предполагая, что эти инструкции являются правильными (что я, возможно, не должен предполагать), я попытался следовать этим инструкциям и сделать

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

Тем не менее, он сказал, что «файл не существует», когда я попытался Rm Cocot.rb

Одна вещь, в которой я не уверен - это cd $(brew --prefix)те слова, которые я набираю, или мне нужно заменить префикс на что-нибудь? CD был успешным, поэтому я предполагаю, что он был правильным - он переместил меня в / usr / local, но не было файла для удаления. Содержимое / usr / local is

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

В любом случае, вы знаете, как я могу исправить «brew update»

Обновление: после удаления файлов в соответствии с инструкциями favoretti и попытки chown -R <your_username> $(brew --prefix)/.git, я получил следующую ошибку при запуске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
источник
github.com/Homebrew/homebrew-core - проверьте официальный README.md Homebrew Core. Там не должно быть необходимости корректировать разрешения, как рекомендуют некоторые из старых ответов. Также убедитесь, что вы указываете на текущий официальный источник URL. Больше информации в этом ответе: stackoverflow.com/questions/14113427/…
Kay V

Ответы:

279
cd $(brew --prefix)
git reset --hard HEAD
brew update
Стрэнд Маккатчен
источник
Была похожая проблема с исходным вопросом, но с другими конфликтующими файлами. Просто перезагрузки было достаточно, чтобы я смог обновить и решить проблему.
Дэвид
17
Вы также можете сделать git add .следующее git stash: P
mkk
Работает для меня. Буквально наберите этот cd $ (brew --prefix)
Saran
13
Если после перехода в каталог brew с помощью cd $(brew --prefix)и сброса стадии git с помощью git reset --hard HEADyour git statusне возвращает рабочий каталог clean, вам также может понадобиться очистить состояние, запустив git clean -df.
Стрэнд Маккатчен
82
Вместо git reset --hard HEAD(что не будет работать для меня), я сделал git fetch --allиgit reset --hard origin/master
Кевин.
360

Вам нужно сделать следующее:

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

А затем сделать

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

В основном, чтобы объяснить немного больше:

cd $(brew --prefix)

говорит cdизменить каталог на что brew --prefixбудет выводить. Если вы попытаетесь выполнить brew --prefixкоманду, вы должны увидеть что-то в строках:

brew --prefix
/usr/local

Таким образом, команда будет в этом случае эквивалентом cd /usr/local. Более новые brewверсии имеют формулы под префиксом установки Library/Formula/, поэтому вам нужно искать эти устаревшие / измененные файлы.

Обратите внимание, что если вы изменили эти формулы самостоятельно по определенной причине (например, закрепление версии), это действие вернет их к значениям по умолчанию и может привести к нежелательным эффектам.

@TedPennings отметил в комментариях, что это работает для него, но его последовательность была:

  1. наколоть все my_username:admin, т.е.sudo chown -R ted:admin $(brew --prefix)
  2. выполните две команды git, указанные выше, git fetch originиgit reset --hard origin/master
favoretti
источник
1
когда я делал git reset --hard origin / master, казалось, он работал только частично. Это выход. ошибка: невозможно отменить связь со старым «.gitignore» (разрешение запрещено) ошибка: невозможно создать файл CONTRIBUTING.md (разрешение запрещено) Извлечение файлов: 100% (2493/2493), выполнено. Неустранимый: не удалось сбросить индексный файл до версии «origin / master».
BrainLikeADullPencil
3
Это означает, что ваши разрешения облажались. Один из способов - запустить sudo git reset --hard, другой, а лучший способ - исправить разрешения и сделатьchown -R <your_username> $(brew --prefix)/.git
favoretti
Вот как выглядят разрешения на мой префикс brew:drwxrwxr-x 16 root admin 646 Dec 27 20:30 /usr/local/
favoretti
19
Это решение исправило ситуацию для меня, но мне пришлось привязать все к своему имени пользователя: admin, то есть, sudo chown -R ted:admin $(brew --prefix)а затем запустить две команды git, указанные выше, git fetch originиgit reset --hard origin/master
Ted Pennings
2
@TedPennings: Круто! Я добавлю ваши команды в ответ в качестве возможного дополнительного шага.
favoretti
46

Это вызвано старой ошибкой в updateкоде, которая уже давно исправлена. Однако природа ошибки требует, чтобы вы сделали следующее:

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

Если вы brew doctorвсе еще жалуетесь о непринятых изменениях, также выполните эту команду:

cd $(brew --repository)    
git clean -fd
Эрик Ву
источник
3
Это решение работало для меня, когда принятого ответа не было.
JBCP
31
$ cd $(brew --prefix)
$ git clean -fd
$ git reset --hard
$ sudo chown -R `whoami` `brew --prefix`
$ brew update

Примечание: шаги 2 и 3 работали для меня, так как я сделал шаг 5 до 4, прежде чем я получил ошибку. Заварить обновление перед изменением владельца папки вызвало целую проблему.

Рон Д.
источник
Это сработало для меня. Я хотел бы добавить, что это может быть вызвано тем, что другие программы устанавливают вещи /usr/localс другими разрешениями. Для меня это был MacPGP, который установил себя с правами суперпользователя.
Overbryd
1
Это исправило это для меня после обновления до Mac OS X 10.11, перепутанного с /usr/localразрешениями. Спасибо!
CletusW
Стоит отметить, что вам не нужно менять разрешения и перемещать каталоги вручную. См. Например, stackoverflow.com/a/40599893/5440638 .
Кей V
6

У меня была похожая проблема, когда моя библиотека пакетов brew была загружена от имени пользователя root, а затем я не смог запустить brew update, поскольку git пожаловался на невозможность слить файл.

Решение было сделать: -

sudo chown -R <user> /usr/local/Library
земельная собственность
источник
5

Сброс хранилища brew должен быть наиболее эффективным способом, если вы не возражаете отказаться от возможных изменений формул, которые вы могли применить:

$ cd `brew --prefix`
$ git fetch origin
$ git reset --hard origin/master
$ brew cleanup --force
$ brew update
pstaender
источник
4

Я смог исправить это на своем компьютере, добавив разрешение на запись группы администратора (и бит setgid) по следующим путям:

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

S устанавливает идентификатор группы при выполнении, чтобы права на запись не терялись в следующий раз, когда другой администратор обновит или обновит Homebrew.

Этот ответ несколько неполный, потому что, когда я пытаюсь это сделать, brew cleanup --forceвозникает проблема с разрешениями, когда Homebrew пытается удалить контент в / usr / local / Cellar /. (К сожалению, в настоящее время я не могу исследовать это дальше.)

jimmont
источник
2
Существует популярный скрипт, написанный для исправления разрешений Homebrew, который, очевидно, работает довольно хорошо. Я не должен был использовать это сам; Я вручную сделал изменения :) Но это может помочь другим: gist.github.com/rpavlik/768518
Стив Беннер
1

Другой вариант - просто использовать git stash.

Команда brew update выполняет a git pull, поэтому, если есть какие-либо измененные файлы (или даже атрибуты файлов, которые произошли со мной, когда я рекурсивно изменил разрешения в каталоге), вам нужно как-то исправить конфликты. Использование git stashэто один из способов; он принимает любые изменения и откладывает их в сторону, чтобы вы фактически вернулись к последней обновленной версии репо. Homebrew 'location' является по умолчанию /usr/localи устанавливается как git-репозиторий. Вы можете найти .gitпапку, чтобы увидеть для себя. Я пишу сценарий удаления доморощенного напитка, который скоро будет размещен в моем профиле GitHub с дополнительной информацией.

Стив Беннер
источник
1
sudo chown -R USER /usr/local/bin

примечание - для ПОЛЬЗОВАТЕЛЯ используйте команду who т.е. ваше имя пользователя

sudo brew doctor
ИМВП
источник
или обобщить: sudo chown -R $USER /usr/local/binгде добавление $положит переменную env USER, которая содержит текущее имя USER.
Cometsong
1

Этот подход может быть проще, чем некоторые. Это включает в себя:

  • исправление проблемы с git, чтобы вы могли снова делегировать управление изменениями.
  • нет ручного перемещения файлов или каталогов.
  • нет ручной настройки прав доступа к файлам или каталогам.

Шаги (с примечаниями для тех, кто хочет объяснений):

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 

Обзор.
Из того, что я могу сказать, действительной причиной этой проблемы является изменение URL репо. Это сейчас brewи было brew.git. (Полный актуальный URL: https://github.com/Homebrew/brew )

Примечание 1. Эта первая команда перенесет вас из любой части вашей файловой структуры в правильный каталог. Структура каталогов для меня отличается от того, что другие показывают выше (Mac OS 10.11.16), но с этой командой эти различия не должны иметь значения.

Примечание 2: эта вторая команда добавляет правильный удаленный URL к новому псевдониму; Я сделал это на тот случай, если этот подход не достиг желаемого, и мне снова понадобился предыдущий адрес. Так как новый пульт работал, я приглашаю кого-то еще прокомментировать простое изменение URL с псевдонимом origin. Я с удовольствием обновлю ответ, чтобы отразить, что сработало для вас.

Примечание 3: Эта четвертая команда дает желаемый результат: она сообщает о большом количестве обновлений, включая особенно приятный отчет "==> Перенос HOMEBREW_REPOSITORY в / usr / local / Homebrew!" (акцент их).

Кей V
источник
Это работает, когда вы получаете 504 ошибки при запуске brew update.
Омнилорд
0

Этот пост помог мне после обновления до El Capitan. В моем случае chownне работало («zsh: команда не найдена: chown»), поэтому шаг 1 добавлял эту строку в мой .zshrc:

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

Я уже попробовал некоторые из наиболее популярных ответов выше, поэтому я почти уверен, что git statusони станут чистыми к тому времени, когда я вставил критическую команду из поста в блоге:

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

clozach
источник
0

Это должно работать.

1. cd `brew --prefix`
2. git fetch origin
3. git reset --hard origin/master
4. sudo brew update
Рахул Вивек
источник
Кстати, sudo настоятельно не рекомендуется при использовании доморощенного. Обратите внимание на отрицательные ответы на другие ответы на этот вопрос, а также предупреждающий сигнал, который доморощенный хозяин предупреждает, когда вы вводите команду с помощью sudo. @ A5308Y также содержит ссылку на часто задаваемые вопросы о том, почему sudo плох; последняя версия этого FAQ находится по адресу github.com/Homebrew/brew/blob/master/docs/… Вы пробовали выполнять свои действия без sudo?
Кей V