Brew更新失败:未跟踪的工作树文件将被合并覆盖


207

尝试使用brew update以下方法更新Homebrew时出现以下错误

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的内容是

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-检查Homebrew Core的官方README.md。正如一些较旧的答案所建议的,应该无需调整权限。还要检查您是否指向当前的官方源URL。该答案的更多信息:stackoverflow.com/questions/14113427/…–
凯五世

Answers:


279
cd $(brew --prefix)
git reset --hard HEAD
brew update

与原始问题有类似的问题,但文件冲突。只需重置就足以让我更新和解决问题。
大卫,

17
您可能想要做的也git add .接下来git stash:P
mkk 2014年

为我工作。从字面上键入此CD $(brew --prefix)
Saran

13
如果更改为BREW目录中后cd $(brew --prefix),用复位git的阶段git reset --hard HEADgit status不返回工作目录清理您可能还需要通过运行清理状态git clean -df
Strand McCutchen 2014年

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 reset --hard origin / master时,它似乎只能部分工作。这是输出。错误:无法取消链接旧的'.gitignore'(权限被拒绝)错误:无法创建文件CONTRIBUTING.md(权限被拒绝)检出文件:100%(2493/2493),已完成。致命:无法将索引文件重置为修订版“原始/主版”。
BrainLikeADullPencil

3
这意味着您的权限被搞砸了。一种方法是运行sudo git reset --hard,另一种更好的方法是修复权限并执行操作chown -R <your_username> $(brew --prefix)/.git
–avouretti

这是我的brew前缀的权限如下所示:drwxrwxr-x 16 root admin 646 Dec 27 20:30 /usr/local/
–avouretti

19
该解决方案为我解决了所有问题,但是我不得不将所有内容都扔给我的用户名:admin,即,sudo chown -R ted:admin $(brew --prefix)然后运行上面的两个git命令,git fetch origin以及git reset --hard origin/master
Ted Pennings

2
@TedPennings:太酷了!我会将您的命令添加到答案中,作为可能的附加步骤。
favouretti

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步对我有用,因为在出​​现错误之前我在第4步之前做了第5步。更改文件夹所有者之前的brew更新导致了整个问题。


这对我有用。我想补充一点,这可能是由其他程序/usr/local以其他权限安装东西引起的。对我来说,是MacPGP以root权限安装了自己。
2015年

1
升级到Mac OS X 10.11后,此问题为我解决了,该文件/usr/local的权限混乱。谢谢!
CletusW

值得注意的是,您可能不需要手动更改权限和移动目录。例如,请参阅stackoverflow.com/a/40599893/5440638
凯五世

6

我有一个类似的问题,其中我的brew软件包库以root用户身份下载,然后我无法运行brew更新,因为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

4

通过在以下路径中添加管理员组写入(和setgid位)权限,我可以在计算机上解决此问题:

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

s在执行时设置组ID,以便下次其他管理员用户更新或升级Homebrew时不会丢失写权限。

这个答案有些不完整,因为当我尝试这样做brew cleanup --force时,Homebrew尝试删除/ usr / local / Cellar /中的内容时出现权限问题。(很遗憾,目前我无法对此进行进一步的调查。)


2
编写了一个流行的脚本来修复Homebrew权限,显然效果很好。我不需要自己使用它;我手动进行了更改:)但这可能会对其他人有所帮助:gist.github.com/rpavlik/768518
史蒂夫·本纳

1

另一种选择是只使用 git stash

brew update命令执行git pull,因此,如果有任何更改的文件(甚至文件属性,当我递归更改目录权限时发生在我身上),则必须以某种方式解决冲突。使用git stash是一种方法。它需要进行任何更改并将其放在一旁,以便您有效地还原到上一个更新的回购版本。默认情况下/usr/local,Homebrew的“位置”为git仓库。您可以寻找一个.git文件夹供自己查看。我正在编写一个自制卸载脚本,该脚本将很快发布在GitHub个人资料中,并提供更多信息。


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

注意-对于USER使用命令,即您的用户名

sudo brew doctor

或概括一下: sudo chown -R $USER /usr/local/bin在添加$posit的情况下,USER env变量保存当前的USERNAME。
Cometsong '16

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 

概述:据
我所知,此问题的实际原因是仓库网址的更改。现在brew,过去brew.git。(完整的最新网址:https : //github.com/Homebrew/brew

注意1:第一个命令会将您从文件结构中的任何位置带到正确的目录。对于我来说,目录结构与上面显示的目录结构(Mac OS 10.11.16)不同,但是使用此命令,这些差别无关紧要。

注意2:这第二个命令将正确的远程URL添加到新的别名中。我这样做是为了防止这种方法无法实现我想要的功能,而我又需要以前的地址。由于新的遥控器有效,因此我将邀请其他人对仅更改由origin别名的url进行评论。我会很高兴地更新答案,以反映出对您有用的方法。

注意3:第四个命令完全具有所需的结果:它报告了大量更新,包括特别好的报告“ ==>已将HOMEBREW_REPOSITORY迁移到/ usr / local / Homebrew!”。(强调他们的)。


当您在运行时收到504错误时,此方法有效brew update
Omnilord

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

首先,强烈建议在使用自制软件时不要使用sudo。请注意该问题其他答案的不赞成票,以及当您使用sudo输入命令时,自制软件可以帮助提供警告。@ A5308Y还提供了有关sudo为什么不好的常见问题解答的链接。该FAQ的最新版本位于github.com/Homebrew/brew/blob/master/docs/…。 您是否尝试过不使用sudo进行操作?
Kay V
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.