Помилка оновлення помилки: файли, що відслідковують робоче дерево, будуть перезаписані об'єднанням


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)це ті слова, які я набираю, чи мені потрібно замінити префікс чимось? компакт-диск був успішним, тому я припускаю, що це було правильно - він перемістив мене в / usr / local, але файл не вдалося видалити. Зміст / 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

У будь-якому випадку, чи знаєте ви, як я можу виправити "оновлення варіння"?

Оновлення: Після видалення файлів відповідно до вказівок 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


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)
Саран,

13
Якщо після зміни в каталозі заварки з cd $(brew --prefix)та скидання стадії git git reset --hard HEADвашим git statusробочим каталогом не повертається чистий, вам також може знадобитися очистити стан шляхом запуску git clean -df.
Strand McCutchen

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

1
коли я робив скидання git - жорстке походження / майстер, здавалося, що він частково працює. Це вихід. помилка: не вдається від’єднати стару помилку ".gitignore" (дозвіл відхилено): неможливо створити файл CONTRIBUTING.md (дозвіл відхилено) Перевірка файлів: 100% (2493/2493), виконано. fatal: Не вдалося скинути індексний файл до редакції "origin / master".
BrainLikeADullPencil

3
Це означає, що ваші дозволи накручені. Одним із способів було б запустити sudo git reset --hard, іншим і кращим способом було б виправити дозволи та зробитиchown -R <your_username> $(brew --prefix)/.git
favoretti

Ось як виглядають дозволи на мій префікс пивоваріння: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
Тед Пеннінгс

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 встановив себе з правами root.
Overbryd

1
Це виправлено для мене після оновлення до Mac OS X 10.11, переплутаних з /usr/local's правами. Дякую!
CletusW

Варто зазначити, що вам може не знадобитися змінювати дозволи та переміщувати каталоги вручну. Дивіться , наприклад, stackoverflow.com/a/40599893/5440638 .
Kay V

6

У мене була подібна проблема, коли мою бібліотеку пакетів пивоваріння завантажували як кореневий користувач, і тоді я не зміг запустити оновлення варіння, оскільки git скаржиться на не в змозі злити файл.

Рішення було зробити:

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

5

Скидання сховища варіння має бути найефективнішим способом, якщо ви не заперечуєте проти відкидання потенційних модифікацій формул, які ви могли б застосувати:

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

4

Мені вдалося виправити це на своїй машині, додавши дозвіл на запис адміністратора (та встановлений жорсткий біт) на ці шляхи:

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

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

Ця відповідь дещо неповна, тому що, коли я намагаюся зробити, brew cleanup --forceвиникає проблема дозволів, коли Homebrew намагається видалити вміст у / usr / local / Cellar /. (На жаль, наразі я не в змозі дослідити це далі.)


2
Існує популярний сценарій, написаний для виправлення дозволу Homebrew, який, мабуть, працює досить добре. Мені не потрібно було його самостійно використовувати; Я вручну змінив :) Але це може допомогти іншим: gist.github.com/rpavlik/768518
Стів Беннер

1

Ще один варіант - просто використовувати git stash.

Команда оновлення заварки виконує a git pull, тому якщо є якісь змінені файли (або навіть атрибути файлів, що траплялося зі мною, коли я змінював дозволи в каталозі рекурсивно), вам доведеться якось виправити конфлікти. Використання git stash- один із способів; він приймає будь-які зміни та відкладає їх убік, щоб ви ефективно повернулися до останньої оновленої версії репо. "Місцезнаходження" Homebrew за замовчуванням, /usr/localвоно встановлюється як сховище git. Ви можете шукати .gitпапку, щоб побачити самі. Я пишу сценарій видалення домашнього короваю, який незабаром буде розміщений на моєму профілі GitHub з додатковою інформацією.


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

Примітка - для використання USER команда кого, тобто ваше ім'я користувача

sudo brew doctor

або для узагальнення: sudo chown -R $USER /usr/local/binпри додаванні $пози розміщує змінну USV env, яка містить поточне ім'я 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-адресу, псевдонім за походженням. Я із задоволенням оновлю відповідь, щоб відобразити те, що працювало для вас.

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


Це працює, коли ви отримуєте 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


0

Це має спрацювати.

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

Fwiw, sudo сильно не рекомендується використовувати домашню каву. Зауважте, що голоси внизу щодо інших відповідей на це запитання, а також попередження домочадця корисно надає під час введення команди за допомогою sudo. @ A5308Y також надає посилання на поширені запитання про те, чому судо погано; остання версія цього FAQ - це на веб- сайті github.com/Homebrew/brew/blob/master/docs/… Ви намагалися виконувати свої кроки без судо?
Kay V
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.