Homebrew 显示与 git 相关的错误

时间:2021-04-01 15:57:31

标签: git macos homebrew

最近,当我使用任何包运行 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>...]'

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

我尝试在运行 brew doctorbrew cleanup 时进行一些自动修复,但上述输出仍然显示。

什么意思?也许安装一些软件包后发生了一些变化?

您对如何解决此问题有任何建议吗?

2 个答案:

答案 0 :(得分:0)

TL;DR:如果您只想要解决方案/变通方法,请忽略“我如何发现问题”部分和末尾的附录。

我是如何发现问题的

运行下面的 brew 命令后

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

并检查 brewlog.txt 文件,我意识到当 Homebrew 尝试访问我在 Github.com 帐户上创建的两个水龙头以“提取”某些软件包的旧版本以便安装那些旧版本,因为这个过程是 Homebrew 特别建议的(请参阅最后的附注)。

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

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

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

我如何理解该做什么

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

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

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

我是如何解决的

所以,为了“填充”我的两个 Github tap,我所做的只是通过从两个文件夹中的每一个运行以下命令将这些内容添加到远程 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 无法确定远程头。因此我按照上面的解释解决了这个问题。

答案 1 :(得分:0)

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

rm -rf /opt/homebrew

或者它可能在另一个路径中

rm -rf /etc/homebrew

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