Homebrew 显示 git 相关的错误

Homebrew shows git-related errors

最近,当我 运行 brew install 使用任何软件包时,在开始安装 Homebrew 之前总是显示以下 git 相关的输出。

error: Cannot determine remote HEAD
fatal: ambiguous argument 'refs/remotes/origin/master': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
error: Cannot determine remote HEAD
fatal: ambiguous argument 'refs/remotes/origin/master': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

备注:澄清一下,是的,是同一条消息打印了两次。
(但也许每条消息都与不同的存储库相关)

我尝试进行一些自动修复 运行ning brew doctorbrew cleanup 但上面的输出仍然出现。

这是什么意思?也许安装了一些软件包后有些东西被改变了?

你对如何解决这个问题有什么建议吗?

TL;DR: 如果您只想要 solution/workaround,请忽略“我如何发现问题”部分和最后的附录。

我是如何发现问题的

运行执行下面的 brew 命令后

brew update -vd --preinstall >brewlog.txt 2>&1

并检查 brewlog.txt 文件,我意识到当 Homebrew 试图访问我在 Github.com 帐户上创建的两个 tap 以“提取”一些旧版本时,会出现这两个错误软件包以便安装那些旧版本,因为这个过程是由 Homebrew 特别建议的(请参阅末尾的附加说明)。

特别是,在自动更新期间,Homebrew 会尝试访问这两个水龙头,即相应的两个存储库,并尝试 运行 以下两个命令。

git remote set-head origin --auto
git symbolic-ref refs/remotes/origin/HEAD

但是由于我在 Github 帐户上创建的那些点击被存储为空存储库,因此没有提交,也没有 HEAD,因此 git 回复 Cannot determine remote HEAD以及其余的错误消息。

我是如何理解该做什么的

为了解决这个问题,或者至少是为了解决这个问题,我刚刚向存储库添加了一些内容。特别是,brewlog.txt 文件显示上述 git 命令是从以下路径中执行的。

/usr/local/Homebrew/Library/Taps/GITHUBACCOUNTNAME/PACKAGENAME

所以我导航到这两个文件夹,我注意到本地实际上有一个名为 Formula 的文件夹,其中包含一个名为 PACKAGENAME.rb 的文件。我想这些内容是 Homebrew 在安装旧版本时存储的。

我是怎么解决的

所以,为了“填充”我的两个 Github tap,我所做的就是通过 运行 从每个两个文件夹。

git add Formula
git commit -m "First commit"
git push

现在这两个水龙头中有一个 HEAD,Homebrew 不再抱怨了。

关于安装旧版本的进一步说明

过去,只需在 Github 上找到“正确的提交”(查看 here 了解详细信息)并编写类似的内容,就可以安装旧版本的 Homebrew 软件包这个。

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/PACKAGENAME.rb

现在这不再有效了,因为 Homebrew 回复了这样的内容:

Invalid usage: Installation of PACKAGENAME from a GitHub commit URL is unsupported! `brew extract PACKAGENAME` to a stable tap on GitHub instead. (UsageError)

所以这就是我所做的,我在我的 Github 帐户上创建了两个(私人)空水龙头,我使用 brew extract 将旧版本“提取”到这些水龙头,因此使用那些两次点击作为旧版本的“指针”。

但是这个提取是由 Homebrew 本地 完成的,所以我的 Github 帐户上的存储库仍然是空的,并且在进行自动更新和检查这两个时存储库 Github 无法确定远程 HEAD。因此我按照上面的解释解决了这个问题。

由于网络问题,我在 MacBook Pro M1 上遇到了类似的错误,这对我有用:

rm -rf /opt/homebrew

或者可能在另一条路径上

rm -rf /etc/homebrew

检查两个目录中的 homebrew 目录并将其删除。

这对我有用:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

git config --global core.compression 0

git config --global http.postBuffer 1048576000

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

这对我有用:

  • 运行 这个:
sudo rm -rf ./linuxbrew/
  • 然后 re-install 酿造