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

Posted

技术标签:

【中文标题】Brew 更新失败:未跟踪的工作树文件将被合并覆盖【英文标题】:Brew update failed: untracked working tree files would be overwritten by merge 【发布时间】:2012-12-16 07:28:06 【问题描述】:

尝试使用 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

无论如何,你知道我该如何修复“brew update”

更新:根据 favouretti 的说明删除文件并尝试 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/cros-s-roads.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

【问题讨论】:

***.com/questions/10762859/… github.com/Homebrew/homebrew-core - 查看 Homebrew Core 的官方 README.md。正如一些较旧的答案所建议的那样,不需要调整权限。还要检查您是否指向当前的官方来源网址。此答案中的更多信息:***.com/questions/14113427/… 【参考方案1】:

您需要执行以下操作:

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 在 cmets 中指出这对他有用,但他的顺序是:

    chown 一切到my_username:admin,即sudo chown -R ted:admin $(brew --prefix) 运行上面的两个git命令,git fetch origingit reset --hard origin/master

【讨论】:

当我执行 git reset --hard origin/master 时,它似乎只能部分工作。这是输出。错误:无法取消链接旧的“.gitignore”(权限被拒绝)错误:无法创建文件 CONTRIBUTING.md(权限被拒绝)签出文件:100% (2493/2493),完成。致命:无法将索引文件重置为修订版“origin/master”。 这意味着你的权限被搞砸了。一种方法是运行sudo git reset --hard,另一种更好的方法是修复权限并执行chown -R <your_username> $(brew --prefix)/.git 我的 brew 前缀的权限如下所示:drwxrwxr-x 16 root admin 646 Dec 27 20:30 /usr/local/ 这个解决方案为我解决了问题,但我必须将所有内容都改成我的用户名:admin,即sudo chown -R ted:admin $(brew --prefix),然后运行上面的两个 git 命令,git fetch origingit reset --hard origin/master跨度> @TedPennings:酷!我会将您的命令添加到答案中作为可能的附加步骤。【参考方案2】:
cd $(brew --prefix)
git reset --hard HEAD
brew update

【讨论】:

与原始问题有类似的问题,但有不同的冲突文件。只需重置就足以让我更新并解决问题。 你可能也想做git add .,然后是git stash:P 为我工作。直接输入这个 cd $(brew --prefix) 如果在使用 cd $(brew --prefix) 切换到 brew 目录并使用 git reset --hard HEAD 重置 git 阶段后,您的 git status 没有返回工作目录干净,您可能还需要通过运行清理状态git clean -df. 我没有使用git reset --hard HEAD(这对我不起作用),而是使用git fetch --allgit reset --hard origin/master【参考方案3】:

我遇到了类似的问题,我的 brew 包库以 root 用户身份下载,然后我无法运行 brew update,因为 git 会抱怨无法合并文件。

解决办法是:-

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

【讨论】:

【参考方案4】:

我可以通过在这些路径添加管理员组写入(和 setgid 位)权限在我的机器上解决此问题:

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

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

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

【讨论】:

有一个流行的脚本用来修复 Homebrew 权限,显然效果很好。我不需要自己使用它;我手动进行了更改:) 但这可能对其他人有所帮助:gist.github.com/rpavlik/768518【参考方案5】:

如果您不介意放弃对您可能已应用的公式的潜在修改,那么重置 brew 存储库应该是最有效的方法:

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

【讨论】:

【参考方案6】:

这是由update 代码中的一个旧错误引起的,该错误早已得到修复。但是,该错误的性质要求您执行以下操作:

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

如果brew doctor 仍然抱怨未提交的修改,也运行这个命令:

cd $(brew --repository)    
git clean -fd

【讨论】:

当接受的答案无效时,此解决方案对我有用。【参考方案7】:

另一种选择是只使用git stash

brew update 命令执行git pull,因此如果有任何更改的文件(甚至是文件属性,当我递归更改目录中的权限时发生在我身上)你必须以某种方式解决冲突。使用git stash 是一种方法;它需要任何更改并将它们放在一边,以便您有效地恢复到上次更新的 repo 版本。 Homebrew 的“位置”默认为 /usr/local,它作为 git 存储库安装。您可以查找.git 文件夹以亲自查看。我正在编写一个自制卸载脚本,很快就会在我的 GitHub 个人资料上发布更多信息。

【讨论】:

【参考方案8】:
$ cd $(brew --prefix)
$ git clean -fd
$ git reset --hard
$ sudo chown -R `whoami` `brew --prefix`
$ brew update

注意:第 2 步和第 3 步对我有用,因为我在收到错误之前在第 4 步之前执行了第 5 步。更改文件夹所有者之前的 brew update 导致了整个问题。

【讨论】:

这对我有用。我想补充一点,这可能是由其他程序在/usr/local 中安装具有其他权限的东西引起的。对我来说,是 MacPGP 以 root 权限自行安装。 这在升级到 Mac OS X 10.11 后为我修复了 /usr/local 的权限。谢谢! 值得注意的是,您可能不需要手动更改权限和移动目录。例如,请参阅***.com/a/40599893/5440638。【参考方案9】:

This post 在更新到 El Capitan 后帮助了我。就我而言,chown 不起作用(“zsh: command not found: chown”),所以第 1 步是将这一行添加到我的 .zshrc:

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

我已经尝试了上面几个比较流行的答案,所以我很确定 git status 在我粘贴博客文章中的关键命令时已经干净了:

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

【讨论】:

【参考方案10】:
sudo chown -R USER /usr/local/bin

注意 - 供用户使用命令,即您的用户名

sudo brew doctor

【讨论】:

或者概括地说:sudo chown -R $USER /usr/local/bin 添加$ 会设置 USER 环境变量,该变量包含当前的 USERname。【参考方案11】:

这应该可行。

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

【讨论】:

Fwiw,强烈建议不要使用自制软件时使用 sudo。请注意对这个问题的其他答案的反对票,以及当您使用 sudo 输入命令时自制软件提供的有用警告。 @A5308Y 还提供了关于为什么 sudo 不好的常见问题解答的链接;该常见问题解答的最新版本位于github.com/Homebrew/brew/blob/master/docs/… 您是否尝试过在不使用 sudo 的情况下按照您的步骤操作?【参考方案12】:

这种方法可能比某些方法更简单。它涉及:

修复了一个 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 

概述: 据我所知,这个问题的实际原因是 repo url 发生了变化。现在是 brewbrew.git。 (完整的最新网址:https://github.com/Homebrew/brew)

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

注意 2:第二个命令将正确的远程 url 添加到新别名;我这样做是为了以防这种方法没有完成我想要的并且我再次需要以前的地址。由于新的遥控器有效,我将邀请其他人评论简单地更改以来源为别名的 url。我很乐意更新答案以反映对您有用的方法。

注 3:这第四条命令完全符合预期的结果:它报告了大量更新,包括“==> Migrated HOMEBREW_REPOSITORY to /usr/local/Homebrew!”的特别好的报告。 (强调他们的)。

【讨论】:

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

以上是关于Brew 更新失败:未跟踪的工作树文件将被合并覆盖的主要内容,如果未能解决你的问题,请参考以下文章

.gitignore 和“以下未跟踪的工作树文件将被结帐覆盖”

`git rebase -i` 错误:以下未跟踪的工作树文件将被结帐覆盖:

如何从当前 Git 工作树中删除本地(未跟踪)文件

关于工作树的 git diff,包括未跟踪的文件

git merge 一个文件名大小写更改后的分支 失败

Mercurial更新没有要求合并和覆盖工作目录